mercredi 27 janvier 2016

State Design pattern and infinite loops with MonoGame

I am trying to use state design pattern with my game(MonoGame game).I want to detect collision , so I give cell type and upon it gives me a specific action.But unfortunately this implementation gives infinite loop "Exception.StackOverflow" in player instances.

     abstract class PlayerState
     {
         abstract public void doAction(Player player );
     }

Classes implements PlayerState

    class DeadState:PlayerState
    {
       public override void doAction(Player player)
            {
               player.dead();
               player.setState(this);
            }
     }

     class IncreaseGold: PlayerState
     {
    public override void doAction(Player player)
           {
               player.increaseGold();
               player.setState(this);
           }
     }

Player.cs

      public void setState(PlayerState state) { this.state = state; }
      public PlayerState getState() { return state; }

ActionController.cs

     Player player = new Player();

    public void passCell(int cellType)
    {
        if (cellType == 1)
        {
            new DeadState().doAction(player);
        }
        if (cellType == 2)
        {
            new IncreaseGold().doAction(player);
        }
    }

finally in my Update method on Game1.cs

    protected override void Update(GameTime gameTime)
    {
       player.passCell(cellType);

       base.Update(gameTime);
    }

Aucun commentaire:

Enregistrer un commentaire