Exemplo n.º 1
0
        public override void Update(GameState s, float dt)
        {
            if (lastState != unit.State)
            {
                // A New Animation State If Provided
                SetAnimation(unit.State);
                if (lastState == BehaviorFSM.None)
                {
                    rt = r.Next(120, 350) / 10f;
                }
            }

            // Save Last State
            lastState = unit.State;

            // Step The Current Animation
            if (alCurrent != null)
            {
                alCurrent.Step(dt);
                AnimationFrame = alCurrent.CurrentFrame;
            }

            if (lastState == BehaviorFSM.None)
            {
                // Check For A Random Animation
                if (alCurrent == null)
                {
                    rt -= dt;
                    if (rt <= 0)
                    {
                        rt        = r.Next(120, 350) / 10f;
                        alCurrent = alRest;
                        alCurrent.Restart(false);
                    }
                }
                else
                {
                    // Check If At The End Of The Loop
                    if (AnimationFrame == alCurrent.EndFrame)
                    {
                        alCurrent = null;
                        rt        = r.Next(120, 350) / 10f;
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void SetAnimation(int state)
        {
            switch (state)
            {
            case BehaviorFSM.None:
                alCurrent      = null;
                AnimationFrame = 0;
                break;

            case BehaviorFSM.Walking:
                alCurrent = alWalk;
                alCurrent.Restart(true);
                break;

            case BehaviorFSM.PrepareCombatRanged:
                alCurrent = alPrepareFire;
                alCurrent.Restart(false);
                break;

            case BehaviorFSM.CombatRanged:
                alCurrent = alFire;
                alCurrent.Restart(false);
                break;

            case BehaviorFSM.CombatMelee:
                alCurrent = alMelee;
                alCurrent.Restart(true);
                break;

            case BehaviorFSM.Rest:
                alCurrent = alRest;
                alCurrent.Restart(true);
                break;

            default:
                alCurrent = null;
                return;
            }
        }
Exemplo n.º 3
0
        private void SetAnimation(int state)
        {
            switch (state)
            {
            case BehaviorFSM.Walking:
                alCurrent = alWalk;
                alCurrent.Restart(true);
                break;

            case BehaviorFSM.CombatMelee:
                alCurrent = alCombat;
                alCurrent.Restart(true);
                break;

            case BehaviorFSM.Rest:
                alCurrent = alRest;
                alCurrent.Restart(true);
                break;

            default:
                alCurrent = null;
                return;
            }
        }
Exemplo n.º 4
0
        public override void Update(GameState s, float dt)
        {
            if (System.Threading.Interlocked.CompareExchange(ref isInit, 1, 1) == 0)
            {
                return;
            }

            if (addBlood)
            {
                Splurt(s.TotalGameTime);
                addBlood = false;
            }

            // Animate Death
            if (!unit.IsAlive)
            {
                if (AnimationFrame == alDeath.EndFrame)
                {
                    return;
                }
                alDeath.Step(dt);
                AnimationFrame = alDeath.CurrentFrame;
                return;
            }

            if (lastState != unit.State)
            {
                // A New Animation State If Provided
                SetAnimation(unit.State);
                if (lastState == BehaviorFSM.None)
                {
                    rt = r.Next(120, 350) / 10f;
                }
            }

            // Save Last State
            lastState = unit.State;

            // Step The Current Animation
            if (alCurrent != null)
            {
                alCurrent.Step(dt);
                AnimationFrame = alCurrent.CurrentFrame;
            }

            if (lastState == BehaviorFSM.None)
            {
                // Check For A Random Animation
                if (alCurrent == null)
                {
                    rt -= dt;
                    if (rt <= 0)
                    {
                        rt        = r.Next(120, 350) / 10f;
                        alCurrent = alRest;
                        alCurrent.Restart(false);
                    }
                }
                else
                {
                    // Check If At The End Of The Loop
                    if (AnimationFrame == alCurrent.EndFrame)
                    {
                        alCurrent = null;
                        rt        = r.Next(120, 350) / 10f;
                    }
                }
            }
        }