diff --git a/src/gamestate.c b/src/gamestate.c index 0691123..8e6a630 100644 --- a/src/gamestate.c +++ b/src/gamestate.c @@ -190,6 +190,26 @@ SYMBOL_EXPORT void UnloadAllGamestates(struct Game *game) { } } +SYMBOL_EXPORT void PauseAllGamestates(struct Game *game) { + struct Gamestate *tmp = game->_priv.gamestates; + while (tmp) { + if (tmp->started || !tmp->paused) { + PauseGamestate(game, tmp->name); + } + tmp = tmp->next; + } +} + +SYMBOL_EXPORT void ResumeAllGamestates(struct Game *game) { + struct Gamestate *tmp = game->_priv.gamestates; + while (tmp) { + if (tmp->paused) { + ResumeGamestate(game, tmp->name); + } + tmp = tmp->next; + } +} + SYMBOL_EXPORT void SwitchGamestate(struct Game *game, const char* current, const char* n) { StopGamestate(game, current); UnloadGamestate(game, current); @@ -210,3 +230,15 @@ SYMBOL_EXPORT void SwitchCurrentGamestate(struct Game *game, const char* n) { SYMBOL_EXPORT void ChangeCurrentGamestate(struct Game *game, const char* n) { ChangeGamestate(game, game->_priv.current_gamestate->name, n); } + +SYMBOL_EXPORT void StopCurrentGamestate(struct Game *game) { + StopGamestate(game, game->_priv.current_gamestate->name); +} + +SYMBOL_EXPORT void PauseCurrentGamestate(struct Game *game) { + PauseGamestate(game, game->_priv.current_gamestate->name); +} + +SYMBOL_EXPORT void UnloadCurrentGamestate(struct Game *game) { + UnloadGamestate(game, game->_priv.current_gamestate->name); +} diff --git a/src/gamestate.h b/src/gamestate.h index 58e3f58..a28f242 100644 --- a/src/gamestate.h +++ b/src/gamestate.h @@ -61,10 +61,15 @@ void StartGamestate(struct Game *game, const char* name); void StopGamestate(struct Game *game, const char* name); void PauseGamestate(struct Game *game, const char* name); void ResumeGamestate(struct Game *game, const char* name); +void PauseAllGamestates(struct Game *game); +void ResumeAllGamestates(struct Game *game); void UnloadAllGamestates(struct Game *game); void SwitchGamestate(struct Game *game, const char* current, const char* n); void SwitchCurrentGamestate(struct Game *game, const char* n); void ChangeGamestate(struct Game *game, const char* current, const char* n); void ChangeCurrentGamestate(struct Game *game, const char* n); +void StopCurrentGamestate(struct Game *game); +void PauseCurrentGamestate(struct Game *game); +void UnloadCurrentGamestate(struct Game *game); #endif diff --git a/src/internal.c b/src/internal.c index 4174bdf..de13139 100644 --- a/src/internal.c +++ b/src/internal.c @@ -58,29 +58,6 @@ SYMBOL_INTERNAL void EventGamestates(struct Game *game, ALLEGRO_EVENT *ev) { } } -SYMBOL_INTERNAL void PauseGamestates(struct Game *game) { - struct Gamestate *tmp = game->_priv.gamestates; - while (tmp) { - if ((tmp->loaded) && (tmp->started)) { - game->_priv.current_gamestate = tmp; - (*tmp->api->Gamestate_Pause)(game, tmp->data); - } - tmp = tmp->next; - } -} - - -SYMBOL_INTERNAL void ResumeGamestates(struct Game *game) { - struct Gamestate *tmp = game->_priv.gamestates; - while (tmp) { - if ((tmp->loaded) && (tmp->started)) { - game->_priv.current_gamestate = tmp; - (*tmp->api->Gamestate_Resume)(game, tmp->data); - } - tmp = tmp->next; - } -} - SYMBOL_INTERNAL void DrawConsole(struct Game *game) { if (game->_priv.showconsole) { al_set_target_backbuffer(game->display); diff --git a/src/internal.h b/src/internal.h index d7026c3..af3d5ae 100644 --- a/src/internal.h +++ b/src/internal.h @@ -41,8 +41,6 @@ void DrawGamestates(struct Game *game); void LogicGamestates(struct Game *game); void EventGamestates(struct Game *game, ALLEGRO_EVENT *ev); -void PauseGamestates(struct Game *game); -void ResumeGamestates(struct Game *game); void DrawConsole(struct Game *game); void Console_Load(struct Game *game); void Console_Unload(struct Game *game);