aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornathansmithsmith <nathansmith7@mailfence.com>2023-10-01 19:46:39 -0600
committernathansmithsmith <nathansmith7@mailfence.com>2023-10-01 19:46:39 -0600
commitf22a4557c99a8541d2ce3e3f8b61db5a33f4240b (patch)
tree18c357ac65d1e006307160fb693e9cdfe71ea401
parent939c371224e94f0ea4bdfb5f67e50b7ab943127c (diff)
Better design for level handling
-rw-r--r--src/levels.c20
-rw-r--r--src/levels.h7
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