コード例 #1
0
        private void Fight()
        {
            float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, m_Owner.Target.Pos);

            if (dist > AI.AttackDist)
            {
                ChangeState <AIChaseState>();
                return;
            }

            if (m_Owner.CurFsmStateType == ActorFsmStateType.FSM_SKILL)
            {
                return;
            }
            SkillTree skill = m_Owner.ActorSkill.FindNextSkillByDist(dist);

            if (skill != null)
            {
                m_Owner.ExecuteCommand(new UseSkillCommand(skill.Pos));
            }
            else
            {
                m_Owner.ExecuteCommand(new IdleCommand());
            }
        }
コード例 #2
0
        protected override void OnUpdate(IFsm <ActorBase> fsm, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(fsm, elapseSeconds, realElapseSeconds);

            ActorBase pTarget = m_Owner.Target;

            switch (m_Owner.ActorType)
            {
            case ActorType.Monster:
            {
                if (pTarget?.CachedTransform != null)
                {
                    float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, pTarget.Pos);
                    if (dist < AI.WaringDist)
                    {
                        ChangeState <AIChaseState>();
                    }
                }
            }
            break;

            case ActorType.Partner:
            {
                if (pTarget?.CachedTransform != null)
                {
                    float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, pTarget.Pos);
                    if (dist < AI.WaringDist)
                    {
                        ChangeState <AIChaseState>();
                    }
                }
                ActorBase pHost = m_Owner.Host;
                if (pHost?.CachedTransform != null)
                {
                    float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, m_Owner.Host.Pos);
                    if (dist > AI.FollowDist)
                    {
                        ChangeState <AIFollowState>();
                        return;
                    }
                }
            }
            break;

            case ActorType.Player:
            {
                if (pTarget?.CachedTransform != null)
                {
                    float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, pTarget.Pos);
                    if (dist < AI.WaringDist)
                    {
                        ChangeState <AIChaseState>();
                    }
                }
            }
            break;
            }
        }
コード例 #3
0
        protected override void OnUpdate(IFsm <ActorBase> fsm, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(fsm, elapseSeconds, realElapseSeconds);

            if (m_Owner.Target == null)
            {
                return;
            }

            float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, m_Owner.Target.Pos);

            if (dist < AI.AttackDist)
            {
                ChangeState <AIFightState>();
            }
        }
コード例 #4
0
ファイル: ActorBase.cs プロジェクト: mengtest/demo_tankWar3D
        public ActorBase GetNearestEnemy(float radius = 100)
        {
            List <ActorBase> actors  = GetAllEnemy();
            ActorBase        nearest = null;
            float            min     = radius;

            for (int i = 0; i < actors.Count; i++)
            {
                float dist = GlobalTools.GetHorizontalDistance(actors[i].CachedTransform.position, this.CachedTransform.position);
                if (dist < min)
                {
                    min     = dist;
                    nearest = actors[i];
                }
            }
            return(nearest);
        }
コード例 #5
0
        public SkillTree FindNextSkillByDist(Vector3 dest)
        {
            float dist = GlobalTools.GetHorizontalDistance(dest, m_Owner.Pos);

            return(FindNextSkillByDist(dist));
        }
コード例 #6
0
        protected override void OnUpdate(IFsm <ActorBase> fsm, float elapseSeconds, float realElapseSeconds)
        {
            base.OnUpdate(fsm, elapseSeconds, realElapseSeconds);

            switch (m_Owner.ActorType)
            {
            case ActorType.Monster:
            {
                if (m_Owner.Target == null)
                {
                    return;
                }
                float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, m_Owner.Target.Pos);
                if (dist > AI.WaringDist)
                {
                    ChangeState <AIBackState>();
                }
                else if (dist < AI.AttackDist)
                {
                    ChangeState <AIFightState>();
                    return;
                }
            }
            break;

            case ActorType.Partner:
            {
                if (m_Owner.Target?.CachedTransform == null)
                {
                    ChangeState <AIIdleState>();
                    return;
                }

                float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, m_Owner.Target.Pos);
                if (dist > AI.WaringDist)
                {
                    ChangeState <AIIdleState>();
                    return;
                }
                else if (dist < AI.AttackDist)
                {
                    ChangeState <AIFightState>();
                    return;
                }
            }
            break;

            case ActorType.Player:
            {
                if (m_Owner.Target == null)
                {
                    ChangeState <AIIdleState>();
                    return;
                }
                float dist = GlobalTools.GetHorizontalDistance(m_Owner.Pos, m_Owner.Target.Pos);

                if (dist < AI.AttackDist)
                {
                    ChangeState <AIFightState>();
                    return;
                }
            }
            break;
            }

            if (m_Owner.Target != null)
            {
                m_Owner.ExecuteCommand(new AutoMoveCommand(m_Owner.Target));
            }
        }