diff options
author | nathansmithsmith <nathansmith7@mailfence.com> | 2023-10-01 19:46:39 -0600 |
---|---|---|
committer | nathansmithsmith <nathansmith7@mailfence.com> | 2023-10-01 19:46:39 -0600 |
commit | f22a4557c99a8541d2ce3e3f8b61db5a33f4240b (patch) | |
tree | 18c357ac65d1e006307160fb693e9cdfe71ea401 /src | |
parent | 939c371224e94f0ea4bdfb5f67e50b7ab943127c (diff) |
Better design for level handling
Diffstat (limited to 'src')
-rw-r--r-- | src/levels.c | 20 | ||||
-rw-r--r-- | src/levels.h | 7 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/levels.c b/src/levels.c index 5f1bce1..221da15 100644 --- a/src/levels.c +++ b/src/levels.c @@ -4,14 +4,7 @@ const LevelInfo levelInfoList[LEVELS_COUNT] = { }; void initLevels(Levels * levels) { - levels->currentLevel = 0; - levels->data = NULL; -} - -void freeLevels(Levels * levels) { - if (levels->data != NULL) - KF_FREE(levels->data); - + levels->currentLevel = NO_LEVEL; levels->data = NULL; } @@ -20,7 +13,16 @@ void startLevel(Game * game, Levels * levels, int levelNum) { levelInfoList[levelNum].initCb(game, levels); } +void updateLevel(Game * game, Levels * levels) { + if (levels->currentLevel != NO_LEVEL) + levelInfoList[levels->currentLevel].updateCb(game, levels); +} + void endLevel(Levels * levels) { - freeLevels(levels); + if (levels->currentLevel != NO_LEVEL) + levelInfoList[levels->currentLevel].closeCb(levels); + + levels->currentLevel = NO_LEVEL; + levels->data = NULL; } diff --git a/src/levels.h b/src/levels.h index d349a93..5d0546f 100644 --- a/src/levels.h +++ b/src/levels.h @@ -7,9 +7,12 @@ #define LEVELS_COUNT 1 +#define NO_LEVEL -1 + typedef struct Levels Levels; typedef void (*LevelInitCb)(Game * game, Levels * levels); +typedef void (*LevelCloseCb)(Levels * levels); typedef bool (*LevelUpdateCb)(Game * game, Levels * levels); // Returns true when level is complete typedef struct Levels { @@ -19,15 +22,15 @@ typedef struct Levels { typedef struct LevelInfo { LevelInitCb initCb; + LevelCloseCb closeCb; LevelUpdateCb updateCb; } LevelInfo; extern const LevelInfo levelInfoList[LEVELS_COUNT]; void initLevels(Levels * levels); -void freeLevels(Levels * levels); - void startLevel(Game * game, Levels * levels, int levelNum); +void updateLevel(Game * game, Levels * levels); void endLevel(Levels * levels); #endif |