Есть два основных способа сделать это.
- Сделать состояние игры доступным глобально, либо через глобальную переменную, либо через синглтон.
- Передайте объект поставщика игрового состояния объектам, которым необходимо знать игровое состояние.
Я предпочитаю вариант 2, так как он делает ваши зависимости более явными.
public enum GameState
{
Running,
Paused
}
public interface IGame
{
GameState State { get; }
}
public class SomeObject
{
private IGame m_game;
public SomeObject(IGame game)
{
m_game = game;
}
public void Update()
{
switch (m_game.State)
{
case GameState.Running:
UpdateRunning();
break;
case GameState.Paused:
UpdatePaused();
break;
}
}
}
public class Game : IGame
{
GameState m_state;
SomeObject m_object;
public Game()
{
m_object = new SomeObject(this);
m_state = GameState.Running;
}
public GameState State
{
get
{
return m_state;
}
}
}
Однако, если возможно, следует избегать воздействия на состояние игры какого-либо объекта, кроме игры. Это нарушает инкапсуляцию вашей игры и тесно связывает ваши объекты вместе. Действительно ли объекты должны знать ваше игровое состояние или есть более конкретная вещь, которую они должны знать, чтобы работать? Можете ли вы иметь два отдельных объекта, по одному для каждого игрового состояния, которые контролируются игровым классом?