Beispiel #1
0
        ///<summary>
        ///Required Execute method that defines the rules by which this state
        ///will automatically choose another state to switch to. This method
        ///is overridden and defined to return the name of the state to switch
        ///to based on some criteria.
        ///</summary>
        ///<param name="obj">
        ///The <see cref="IFSMObject"/> on which this state is currently being
        ///executed.
        ///</param>
        ///<returns>
        ///A string containing the state that the specified
        ///<see cref="IFSMObject"/> should switch to.
        ///</returns>
        public override string Execute(IFSMObject obj)
        {
            T2DShape3D bot =
                ((BotAnimationComponent) obj).Owner as T2DShape3D;

            Assert.Fatal(null != bot,
                "BotForwardState.Execute: bot is null");

            //this should not happen
            if (null == bot)
            {
                return StateName;
            }

            Vector2 facing = T2DVectorUtil.VectorFromAngle(bot.Rotation);
            Vector2 forward = Vector2.Normalize(facing);
            Vector2 right = Vector2Util.Perp(forward);
            Vector2 projection = Vector2.Dot(bot.Physics.Velocity, forward) * forward;
            Vector2 normal = projection - bot.Physics.Velocity;

            if (bot.Physics.Velocity.Length() > 0.1f)
            {
                if (projection.Length() > normal.Length())
                {
                    if (Vector2.Dot(projection, forward) >= 0)
                    {
                        //bot.SetSequence("main", "run", 0); //already set
                        return FSM.Instance.GetState(obj, "forward").StateName;
                    }
                    bot.SetSequence("main", "back", 0);
                    return FSM.Instance.GetState(obj, "back").StateName;
                }

                if (Vector2.Dot(normal, right) >= 0)
                {
                    bot.SetSequence("main", "side", 0);
                    return FSM.Instance.GetState(obj, "right").StateName;
                }
                bot.SetSequence("main", "side", 0);
                return FSM.Instance.GetState(obj, "left").StateName;
            }

            if (bot.Physics.AngularVelocity > 0.1f)
            {
                bot.SetSequence("main", "side", 0);
                return FSM.Instance.GetState(obj, "turnRight").StateName;
            }

            if (bot.Physics.AngularVelocity < -0.1f)
            {
                bot.SetSequence("main", "side", 0);
                return FSM.Instance.GetState(obj, "turnLeft").StateName;
            }
            bot.SetSequence("main", "root", 0);
            return FSM.Instance.GetState(obj, "idle").StateName;
        }
            public override string Execute(IFSMObject obj)
            {
                AIRangedAttackController AI = obj as AIRangedAttackController;

                if (AI == null)
                    return null;

                if (AI.InAttackRange && AI.ReadyToAttack)
                    return "attack";

                return null;
            }
            public override string Execute(IFSMObject obj)
            {
                AIKamikazeeController killAI = obj as AIKamikazeeController;

                if (killAI == null)
                    return null;

                if (killAI.InAlertRange && !killAI.InXAttackRange)
                    return "move";

                if (killAI.Attacks)
                    if (killAI.InXAttackRange)// && killAI.onSameLevel)//killAI.InYAttackRange)
                        return "attack";

                return null;
            }
            public override string Execute(IFSMObject obj)
            {
                AIHybridController AI = obj as AIHybridController;

                if (AI == null)
                    return null;

                if (!AI.ReadyToAttack)
                {
                    if (!AI.InAlertRange || AI.InAttackRange)
                        return "idle";
                    else
                        return "move";
                }

                return null;
            }
            public override string Execute(IFSMObject obj)
            {
                AIChaseController chaseAI = obj as AIChaseController;

                if (chaseAI == null)
                    return null;

                   // if (!chaseAI.onSameLevel)
                   //     return "idle";

                if (!chaseAI.ReadyToAttack)
                {
                    if (!chaseAI.InAttackRange)
                        return "move";
                    else
                        return "idle";
                }

                return null;
            }
Beispiel #6
0
 ///<summary>
 ///Optional Exit method that will be called by the Finite State Machine
 ///manager when leaving this state.
 ///</summary>
 ///<param name="obj">
 ///The <see cref="IFSMObject"/> on which this state is being
 ///transitioned from.</param>
 public override void Exit(IFSMObject obj)
 {
 }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    ActorAnimationManager actorAnimMgr = obj as ActorAnimationManager;

                    if (actorAnimMgr._actorComponent == null)
                        return null;

                    if(!actorAnimMgr._actorComponent._animatedSprite.IsAnimationPlaying)
                        actorAnimMgr._actorComponent.Actor.Visible = false;

                    if (actorAnimMgr._actorComponent._alive)
                       return "idle";

                    return null;
                }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return null;

                    if (!actorAnimMgr.actorComponent._alive)
                        return "die";

                    if (actorAnimMgr.actorComponent._Climbing)
                    {
                        if (actorAnimMgr.actorComponent._moveSpeed.Y < 0)
                            return "climbUp";
                        else if (actorAnimMgr.actorComponent._moveSpeed.Y > 0)
                            return "climbDown";

                        return "climbIdle";
                    }

                    if (!actorAnimMgr.actorComponent._onGround)
                    {
                        if (actorAnimMgr.actorComponent._actor.Physics.VelocityY > 0)
                        {
                            return "runFall";
                        }
                    }
                    else
                    {
                        if (actorAnimMgr.actorComponent._moveLeft || actorAnimMgr.actorComponent._moveRight)
                            return "run";
                        else
                            return "idle";
                    }

                    return null;
                }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return null;

                    if (!actorAnimMgr.actorComponent._alive)
                        return "die";

                    if (actorAnimMgr.actorComponent.OnGround)
                    {
                        if (actorAnimMgr.actorComponent._moveLeft || actorAnimMgr.actorComponent._moveRight)
                            return "run";
                        else
                            return "idle";
                    }
                    return null;
                }
                public override void Enter(IFSMObject obj)
                {
                    base.Enter(obj);

                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return;

                    actorAnimMgr.actorComponent.attackActions.GetAction("baseShot").Timer.Start();
                    actorAnimMgr.actorComponent.attackActions.GetAction("baseShot").ReadyToAct = false;
                }
            public override string Execute(IFSMObject obj)
            {
                AIChaseController chaseAI = obj as AIChaseController;

                if (chaseAI == null)
                    return null;

                if (chaseAI.InAlertRange && !chaseAI.InAttackRange)// && chaseAI.onSameLevel)
                    return "move";

                if (chaseAI.Attacks)
                    if (chaseAI.InAttackRange)
                        if (!chaseAI.ReadyToAttack)
                            return null;
                        else
                            return "attack";

                return null;
            }
                public override string Execute(IFSMObject obj)
                {
                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return null;

                    if (!actorAnimMgr.actorComponent._alive)
                        return "die";

                       // Uncomment if we include a fall animation for the grunt
                       /* if(actorAnimMgr.FallingFromGround)
                        if(actorAnimMgr.actorComponent.Actor.Physics.VelocityY > 0)
                            return "fall";
                    */
                    if (actorAnimMgr.actorComponent._moveLeft || actorAnimMgr.actorComponent._moveRight)
                        return "run";

                    return null;
                }
                public override void Enter(IFSMObject obj)
                {
                    base.Enter(obj);

                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return;
                }
                public override void Exit(IFSMObject obj)
                {
                    base.Exit(obj);

                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return;

                    actorAnimMgr.actorComponent.meleeTimer.Start();
                }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return null;

                    if (!actorAnimMgr.actorComponent.Alive)
                        return "die";

                    actorAnimMgr.actorComponent.CheckAttackFrame();

                    if (!actorAnimMgr.actorComponent.AnimatedSprite.IsAnimationPlaying)
                        return "idle";

                    return null;
                }
 public override void Enter(IFSMObject obj)
 {
     base.Enter(obj);
 }
 public override void Exit(IFSMObject obj)
 {
     base.Exit(obj);
 }
Beispiel #18
0
 ///<summary>
 ///Optional Enter method that will be called by the Finite State Machine
 ///manager when entering this state.
 ///</summary>
 ///<param name="obj">
 ///The <see cref="IFSMObject"/> on which this state is being
 ///transitioned to.
 ///</param>
 public override void Enter(IFSMObject obj)
 {
 }
                public override void Enter(IFSMObject obj)
                {
                    base.Enter(obj);

                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return;

                    actorAnimMgr._transitioningTo = actorAnimMgr.actorComponent.RunAnim;

                    if (!actorAnimMgr._transitioning)
                        actorAnimMgr._playAnimation(actorAnimMgr._transitioningTo);

                    if (actorAnimMgr.actorComponent._scaleRunAnimBySpeed)
                        actorAnimMgr.actorComponent.AnimatedSprite.AnimationTimeScale = actorAnimMgr.actorComponent._runAnimSpeedScale / actorAnimMgr.actorComponent._maxMoveSpeed;

                    actorAnimMgr.currentSound = SoundManager.Instance.PlaySound("grunt", "walk");
                }
                public override string Execute(IFSMObject obj)
                {
                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return null;

                    if (!actorAnimMgr.actorComponent._alive)
                        return "die";

                    if ((!actorAnimMgr.actorComponent._scaleRunAnimBySpeed && !(actorAnimMgr.actorComponent._moveLeft || actorAnimMgr.actorComponent._moveRight))
                        || (actorAnimMgr.actorComponent._scaleRunAnimBySpeed && actorAnimMgr.actorComponent._runAnimSpeedScale <= (actorAnimMgr.actorComponent._minRunAnimSpeedScale * actorAnimMgr.actorComponent._maxMoveSpeed)))
                        return "idle";

                    return null;
                }
                public override void Enter(IFSMObject obj)
                {
                    base.Enter(obj);

                    T2DSceneCamera camera = TorqueObjectDatabase.Instance.FindObject<T2DSceneCamera>();

                    if (camera == null)
                        return;

                    camera.Dismount();
                }
                public override void Exit(IFSMObject obj)
                {
                    base.Exit(obj);

                    GruntActorAnimationManager actorAnimMgr = obj as GruntActorAnimationManager;

                    if(actorAnimMgr.currentSound.IsPlaying)
                        actorAnimMgr.currentSound.Stop(AudioStopOptions.Immediate);
                }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return null;

                    if (!actorAnimMgr.actorComponent.AnimatedSprite.IsAnimationPlaying)
                        return "idle";

                    return null;
                }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (!actorAnimMgr.actorComponent._animatedSprite.IsAnimationPlaying)
                    {
                        actorAnimMgr.actorComponent.respawnAnimFinished();
                        return "fall";
                    }

                    return null;
                }
                public override void Enter(IFSMObject obj)
                {
                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return;

                    if (!actorAnimMgr.actorComponent.isJumping)
                    {
                        actorAnimMgr._transitioningTo = actorAnimMgr.actorComponent.RunJumpAnim;

                        if (!actorAnimMgr._transitioning)
                        {
                            actorAnimMgr._playAnimation(actorAnimMgr._transitioningTo);
                            SoundManager.Instance.PlaySound("amanda", "amanda_jump1");
                        }
                    }
                }
                public override void Exit(IFSMObject obj)
                {
                    ActorAnimationManager actorAnimMgr = obj as ActorAnimationManager;

                    if (actorAnimMgr._actorComponent == null)
                        return;

                    actorAnimMgr._transitioning = false;

                    _targetFrame = 0;
                }
                public override void Enter(IFSMObject obj)
                {
                    base.Enter(obj);

                    PlayerActorAnimationManager actorAnimMgr = obj as PlayerActorAnimationManager;

                    if (actorAnimMgr.actorComponent == null)
                        return;

                    actorAnimMgr._transitioningTo = actorAnimMgr.actorComponent.SpawnAnim;

                    if (!actorAnimMgr._transitioning)
                        actorAnimMgr._playAnimation(actorAnimMgr._transitioningTo);
                }
                public override string Execute(IFSMObject obj)
                {
                    base.Execute(obj);

                    ActorAnimationManager actorAnimMgr = obj as ActorAnimationManager;

                    if (actorAnimMgr._actorComponent == null)
                        return null;

                    if (!actorAnimMgr._actorComponent._alive)
                        return "die";

                    if (actorAnimMgr._actorComponent._Climbing)
                    {
                        if (actorAnimMgr._actorComponent._moveSpeed.Y > 0)
                            return "climbDown";
                        else if (actorAnimMgr._actorComponent._moveSpeed.Y == 0)
                            return "climbIdle";
                    }
                    else
                    {
                        if (!actorAnimMgr._actorComponent._onGround)
                            return "fall";
                        else
                            return "idle";
                    }

                    return null;
                }
            public override string Execute(IFSMObject obj)
            {
                PlayerActorComponent obj2 = obj as PlayerActorComponent;

                if (obj2.Alive && !obj2.spawning)
                    return "inAir";

                return null;
            }
            public override string Execute(IFSMObject obj)
            {
                AIHybridController AI = obj as AIHybridController;

                if (AI == null)
                    return null;

                if (!AI.InAlertRange)
                    return "idle";

                if (AI.Attacks && AI.ReadyToAttack)
                     if (AI.InAttackRange || AI.InProjectileRange)
                        return "attack";

                if (!AI.ReadyToAttack && !AI.InAlertRange)
                    return "idle";

                return null;
            }