Ejemplo n.º 1
0
 public override void OnTick(float DeltaTime)
 {
     if (Fsm.Master.Actor.AnimationIsEnd())
     {
         Fsm.ChangeToIdleState();
         return;
     }
 }
Ejemplo n.º 2
0
        public override void OnEnter(CombatEvent Event)
        {
            if (Fsm.Master.IsStatic)
            {
                Fsm.ChangeToIdleState();
                return;
            }

            BeginPos_      = Fsm.Master.Position;
            EndPos_        = (Event as NpcWalkEvent).TargetPos;
            MoveTime_      = 0;
            MoveTotalTime_ = (EndPos_ - BeginPos_).magnitude / Fsm.Master.CalcFinalAttr(NpcAttrIndex.Speed);
            IsMove_        = true;

            Fsm.Master.Actor.PlayAnimation("Walk", true);
            Fsm.Master.Actor.SetDirection(CombatHelper.CalcDirection(BeginPos_, EndPos_));
        }
Ejemplo n.º 3
0
        public override void OnEnter(CombatEvent Event)
        {
            if (Fsm.Master.IsStatic)
            {
                Fsm.ChangeToIdleState();
                return;
            }

            Fsm.Master.Actor.PlayAnimation("Idle", true);
            var Evt = (Event as NpcBackEvent);

            StartPos_ = Fsm.Master.Position;
            BackPos_  = Evt.BackPos;
            BackTime_ = Evt.BackTime;
            Time_     = 0;
            IsEnd_    = false;
        }
Ejemplo n.º 4
0
        public override void OnTick(float DeltaTime)
        {
            if (!IsMove_)
            {
                Fsm.ChangeToIdleState();
                return;
            }

            MoveTime_ += DeltaTime;
            var T = MoveTime_ / MoveTotalTime_;

            if (T >= 1.0f)
            {
                T       = 1.0f;
                IsMove_ = false;
            }

            Fsm.Master.Position = Vector2.Lerp(BeginPos_, EndPos_, T);
        }
Ejemplo n.º 5
0
        public override void OnTick(float DeltaTime)
        {
            if (IsEnd_)
            {
                Fsm.ChangeToIdleState();
                return;
            }

            Time_ += DeltaTime;
            var T = Time_ / BackTime_;

            if (T >= 1.0f)
            {
                IsEnd_ = true;
                T      = 1.0f;
            }

            Fsm.Master.Position = Vector2.Lerp(StartPos_, BackPos_, T);
        }
Ejemplo n.º 6
0
 public override void OnCombatEvent(CombatEvent Event)
 {
     if (Event is NpcWalkEvent)
     {
         Fsm.ChangeToState(FsmStateName.Walk, Event);
     }
     else if (Event is NpcIdleEvent)
     {
         Fsm.ChangeToIdleState();
     }
     else if (Event is NpcSkillEvent)
     {
         Fsm.ChangeToState(FsmStateName.Skill, Event);
     }
     else if (Event is NpcDieEvent)
     {
         Fsm.ChangeToState(FsmStateName.Die, Event);
     }
     else if (Event is NpcBackEvent)
     {
         Fsm.ChangeToState(FsmStateName.Back, Event);
     }
 }
Ejemplo n.º 7
0
        public override void OnEnter(CombatEvent Event)
        {
            var Evt = Event as NpcSkillEvent;

            SkillID_ = Evt.SkillID;
            Skill_   = Fsm.Master.Skill.GetSkill(SkillID_) as NpcSkill;
            if (Skill_ == null)
            {
                Fsm.ChangeToIdleState();
                return;
            }

            Args_ = Evt.Args ?? Fsm.Master.Skill.CreateSkillArgs(SkillID_);

            if (Fsm.Master.Actor.HasAnimation("Attack"))
            {
                Fsm.Master.Actor.PlayAnimation("Attack", false);

                if (!Mathf.Approximately(0, Args_.Direction.sqrMagnitude))
                {
                    Fsm.Master.Actor.FaceToPosition(Fsm.Master.Position + Args_.Direction);
                }
                else if (!Mathf.Approximately(0, Args_.Position.sqrMagnitude))
                {
                    Fsm.Master.Actor.FaceToPosition(Args_.Position);
                }
                else if (Fsm.Master.Action.IsValidTarget())
                {
                    Fsm.Master.Actor.FaceToPosition(Fsm.Master.Action.TargetNpc.Position);
                }
            }
            else
            {
                OnAtkMsg();
                Fsm.ChangeToIdleState();
            }
        }