using System;


namespace CommonUnity3D.UGUIAction
{
    /// <summary>
    /// 延迟动作.
    ///  DelayAction action = new DelayAction();
    ///  action.Duration = 1;
    /// </summary>
    public class DelayAction : ActionBase
    {
        public const string ACTIONTYPE = "DelayAction";

        private float mTotalTime = 0.0f;
        private float mCurrentTime = 0.0f;

        public float Duration
        {
            get
            {
                return mTotalTime;
            }
            set
            {
                mTotalTime = value;
            }
        }

        public float CurrentTime
        {
            get
            {
                return mCurrentTime;
            }
        }

        public ActionFinishHandler UpdateCallBack { get; set; }
        public override void onUpdate(IActionCompment unit, float deltaTime)
        {
            if (deltaTime == 0 || (mCurrentTime == mTotalTime))
                return;

            float previousTime = mCurrentTime;
            float restTime = mTotalTime - mCurrentTime;
            mCurrentTime = Math.Min(mTotalTime, mCurrentTime + deltaTime);

            if (previousTime < mTotalTime && mCurrentTime >= mTotalTime)
            {
                mIsEnd = true;
            }
            if(UpdateCallBack != null)
            {
                UpdateCallBack.Invoke(unit);
            }

        }


        public override void onStart(IActionCompment unit)
        {

        }

        public override bool IsEnd()
        {
            return mIsEnd;
        }

        public override string GetActionType()
        {
            return ACTIONTYPE;
        }
    }
}