Assets/Scripts/TowerDefense/Agents/Agent.cs
@@ -39,7 +39,7 @@
    /// An agent will follow a path of nodes
    /// NavMeshAgent和AttackAffector是必须得加入的EntityNode.
    /// </summary>
    [RequireComponent(typeof(NavMeshAgent)), RequireComponent(typeof(AttackAffector))]
    [RequireComponent(typeof(NavMeshAgent))]
    public abstract class Agent : Targetable
    {
        /// <summary>
@@ -222,10 +222,43 @@
        /// </summary>
        protected bool isSlowDown;
        private bool isFrost;
        /// <summary>
        /// 是否处于冰冻状态
        /// </summary>
        protected bool isFrost;
        /// <value></value>
        public bool IsFrost
        {
            get { return isFrost; }
            set
            {
                if (!isFrost)
                {
                    if (value)
                    {
                        EndlessGameUI.instance.FloatFrostWord(transform.position);
                        PlaySlowDownEffect();
                        CanMove = false;
                    }
                }
                else
                {
                    if (!value)
                    {
                        StopSlowDownEffect();
                        CanMove = true;
                    }
                }
                isFrost = value;
            }
        }
        /// <summary>
        /// 冰冻剩余时间,< 0时解除冰冻,冰冻期间不会被再次冰冻
        /// </summary>
        public float FrostRemainTime { get; set; }
        /// <summary>
        /// 中毒粒子特效
@@ -243,15 +276,9 @@
        public ParticleSystem SlowDownParticle;
        /// <summary>
        /// 冰冻特效
        /// </summary>
        public ParticleSystem FrostParticle;
        /// <summary>
        /// 被火技能攻击特效
        /// </summary>
        public ParticleSystem FireSkillParticle;
        /// <summary>
        /// 降低移动速度.
@@ -262,6 +289,19 @@
            speedSlowRate += rate;
            if (speedSlowRate >= 0.5f)
                speedSlowRate = 0.5f;
        }
        private bool _HasSlowDownText;
        public bool HasSlowDownText
        {
            set
            {
                _HasSlowDownText = value;
            }
            get
            {
                return _HasSlowDownText;
            }
        }
        /// <summary>
@@ -570,14 +610,6 @@
        protected virtual void SetAgentStopBuff(buffinfo binfo)
        {
            MoveStopTime = binfo.last / 1000;
            if (!isFrost)
            {
                isFrost = true;
                if (FrostParticle != null)
                    FrostParticle.Play();
            }
        }
        /// <summary>
@@ -658,7 +690,8 @@
                ps?.Play();
            }
            BloodBar.Hide();
            if (BloodBar)
                Destroy(BloodBar.gameObject);
            // 统一管理器内删除当前的Agent:
            AgentInsManager.instance.removeAgent(this);
            if (EnemyData != null)
@@ -684,12 +717,10 @@
            poisonAttid = 0;
            poisonTimes = 0;
            timeToPoisonHurt = 0;
            isFrost = false;
            IsFrost = false;
            bInDeathAct = false;
            ChangeState(AgentActionState.Move);
            configuration.ClearShieldWall();
            StopFrostParticle();
            if (WoodAimCount > 0)
                WoodAimCount = 0;
@@ -708,14 +739,7 @@
            // 停止DoTween动画.
            transform.DOKill();
            Poolable.TryPool(gameObject);
        }
        private void StopFrostParticle()
        {
            if (FrostParticle != null)
                FrostParticle.Stop();
            Destroy(gameObject);
        }
        /// <summary>   
@@ -751,6 +775,7 @@
            // 获取移动速度
            fMoveSpeed = m_NavMeshAgent.speed / 2.0f;
            _HasSlowDownText = false;
        }
        protected void beDamageStart()
@@ -908,6 +933,21 @@
            MoveStopTime = 0.0f;
        }
        private void PlaySlowDownEffect()
        {
            if (SlowDownParticle != null)
                SlowDownParticle.Play();
        }
        private void StopSlowDownEffect()
        {
            if (SlowDownParticle != null && !isSlowDown && !IsFrost)
            {
                SlowDownParticle.Stop();
                SlowDownParticle.Clear();
            }
        }
        /// <summary>
        /// 根据帧间的时间,来更新Agent的位置信息,其它信息直接删除.
        /// 1: 
@@ -915,46 +955,19 @@
        /// <param name="deltaTime"></param>
        protected void updateAgentPos(float deltaTime)
        {
            if ((!m_CurrentNode) || (!m_NextNode))
                return;
            // 是否处于停止状态.
            if (MoveStopTime > 0)
            {
                MoveStopTime -= Time.deltaTime;
                if (MoveStopTime <= 0)
                {
                    StopFrostParticle();
                    MoveStopTime = 0;
                }
                else
                    return;
            }
            if (fMoveSpeed == 0)
            {
                Debug.Log("当前的移动为零:" + fMoveSpeed);
                return;
            }
            if (!m_CurrentNode || !m_NextNode || fMoveSpeed <= 0.0001f) return;
            float finalSpeed = fMoveSpeed * (1 - speedSlowRate);
            if (speedSlowRate > 0 && !isSlowDown)
            {
                isSlowDown = true;
                if (SlowDownParticle != null)
                    SlowDownParticle.Play();
                PlaySlowDownEffect();
            }
            else if (speedSlowRate == 0 && isSlowDown)
            {
                isSlowDown = false;
                if (SlowDownParticle != null)
                {
                    SlowDownParticle.Stop();
                    SlowDownParticle.Clear();
                }
                StopSlowDownEffect();
            }
            Vector3 curPos = m_NavMeshAgent.transform.position;
@@ -1075,6 +1088,7 @@
        {
            UpdateAction();
            HandleShieldWall();
            HandleFrost();
            // 处理死亡状态了,不必再移动:
            if (bInDeathAct || !CanMove) return;
@@ -1090,6 +1104,22 @@
                updatePoison(Time.deltaTime);
        }
        private void HandleFrost()
        {
            if (IsFrost)
            {
                if (FrostRemainTime > 0f)
                {
                    FrostRemainTime -= Time.deltaTime;
                    if (FrostRemainTime <= 0f)
                        IsFrost = false;
                }
                else
                    IsFrost = false;
            }
        }
        protected virtual void Update()
        {