using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.GlobeDefine;
using GCGame.Table;
using GCGame;

public class CombatValueAnim : UIControllerBase<CombatValueAnim>
{
    #region static

    public static void ShowCombatValueAnim(int orgCombatVal, int curCombatVal)
    {
        Hashtable hash = new Hashtable();
        hash.Add("OrgVal", orgCombatVal);
        hash.Add("CurVal", curCombatVal);
        UIManager.ShowUI(UIInfo.CombatValueAnim, OnCombatValueAnim, hash);
    }

    static void OnCombatValueAnim(bool bSuccess, object param)
    {
        Hashtable hash = param as Hashtable;
        if (!bSuccess)
        {
            return;
        }
        if (hash == null)
        {
            return;
        }
        if (Instance() != null)
        {
            Instance().Show((int)hash["OrgVal"], (int)hash["CurVal"]);
        }
    }

    #endregion

    public UIImgText _CombatVal;
    public UIImgText _CombatAddVal;
    public float _NumJumpTime = 1.5f;
    public float _NumJumpTimeInterval = 0.1f;

    private int _OrgVal;
    private int _CurVal;
    private int _AddVal;

    private float _JumpNum;
    private float _JumpInterval;

    void OnEnable()
    {
        SetInstance(this);
    }

    void OnDisable()
    {
        SetInstance(null);
    }

    public void Show(int orgVal, int curVal)
    {
        gameObject.SetActive(false);
        gameObject.SetActive(true);
        _OrgVal = orgVal;
        _CurVal = curVal;
        _AddVal = _CurVal - _OrgVal;

        _CombatVal.text = _OrgVal.ToString();
        _CombatAddVal.text = _AddVal.ToString();

        _JumpNum = _OrgVal;
        _JumpInterval = _AddVal / _NumJumpTime;
    }

    public void Close()
    {
        UIManager.CloseUI(UIInfo.CombatValueAnim);
    }

    public void StartNumJumpAnim()
    {
        CancelInvoke("NumJump");
        InvokeRepeating("NumJump", 0, _NumJumpTimeInterval);
    }

    private void NumJump()
    {
        _JumpNum += _NumJumpTimeInterval * _JumpInterval;
        _JumpNum = Mathf.Clamp(_JumpNum, _OrgVal, _CurVal);

        _CombatVal.text = ((int)_JumpNum).ToString();

        if (_JumpNum == _CurVal)
        {
            CancelInvoke("NumJump");
        }
    }
    
}