using System;
using System.Collections.Generic;
using System.Text;
namespace Nuclex.Game.States {
/// Allows management and switching of game states
public interface IGameStateService {
/// The currently active game state. Can be null.
IGameState ActiveState { get; }
/// Pauses the currently active state
void Pause();
/// Resumes the currently active state
void Resume();
/// Pushes the specified state onto the state stack
/// State that will be pushed onto the stack
void Push(IGameState state);
/// Pushes the specified state onto the state stack
/// State that will be pushed onto the stack
///
/// Behavior of the game state in relation to the state(s) below it on the stack
///
void Push(IGameState state, GameStateModality modality);
/// Takes the currently active game state from the stack
/// The game state that has been popped from the stack
IGameState Pop();
/// Switches the game to the specified state
/// State the game will be switched to
/// The game state that was replaced on the stack
///
/// This replaces the running game state in the stack with the specified state.
///
IGameState Switch(IGameState state);
/// Switches the game to the specified state
/// State the game will be switched to
///
/// Behavior of the game state in relation to the state(s) below it on the stack
///
/// The game state that was replaced on the stack
///
/// This replaces the running game state in the stack with the specified state.
///
IGameState Switch(IGameState state, GameStateModality modality);
}
} // namespace Nuclex.Game.States