示例#1
0
        public void OnStay(Enemy enemy)
        {
            if (null != enemy.Player)
            {
                enemy.Fsm.ChangeState(Enemy.CHASE_STATE);
            }
            else
            {
                GraphAgent  agent = enemy.agent;
                PatrolPoint point = enemy.GetCurrentPoint();

                agent.Destination = point.Position;

                if (agent.IsReached)
                {
                    if (point is ObservablePoint)
                    {
                        enemy.Fsm.ChangeState(Enemy.OBSERVE_STATE);
                    }
                    else
                    {
                        enemy.NextPoint();
                    }
                }
            }
        }
        public void OnStay(Enemy enemy)
        {
            GraphAgent agent = enemy.agent;

            if (null != enemy.Player)
            {
                agent.moveSpeed = Mathf.Lerp(agent.moveSpeed, enemy.runSpeed, 0.1f);

                Player player = enemy.Player;

                Vector2 position = agent.Position;
                Vector2 target   = player.agent.Position;

                float remainingDistance = Vector2.Distance(position, target);
                if (remainingDistance >= enemy.radius + player.Radius)
                {
                    agent.Destination = target;
                }
                else
                {
                    agent.Destination = position;
                }
            }
            else
            {
                agent.moveSpeed = Mathf.Lerp(agent.moveSpeed, m_MoveSpeed, 0.2f);

                if (agent.IsReached)
                {
                    m_ElapsedTime += Time.deltaTime;

                    if (m_ElapsedTime > 2f)
                    {
                        enemy.Fsm.ChangeState(Enemy.PATROL_STATE);
                    }
                }
            }
        }