Persist level completion
Changelog: - Set and save level completion on hitting the exit - Load level completion on program startmain
parent
9ebacbc572
commit
3098926e21
|
@ -5,3 +5,4 @@ web/
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
.gdb_history
|
.gdb_history
|
||||||
heaptrack.*
|
heaptrack.*
|
||||||
|
save.dat
|
||||||
|
|
2
main.c
2
main.c
|
@ -4,6 +4,7 @@
|
||||||
#include "ent_impl.h"
|
#include "ent_impl.h"
|
||||||
#include "mempool.h"
|
#include "mempool.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
#include "save_data.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#define N_SCENES 4
|
#define N_SCENES 4
|
||||||
|
@ -29,6 +30,7 @@ int main(void)
|
||||||
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
||||||
init_engine(&engine, (Vector2){screenWidth, screenHeight});
|
init_engine(&engine, (Vector2){screenWidth, screenHeight});
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
load_savedata();
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
load_from_infofile("res/assets.info.raw", &engine.assets);
|
load_from_infofile("res/assets.info.raw", &engine.assets);
|
||||||
init_player_creation("res/player_spr.info", &engine.assets);
|
init_player_creation("res/player_spr.info", &engine.assets);
|
||||||
|
|
|
@ -531,7 +531,7 @@ static void at_level_start(Scene_t* scene)
|
||||||
static void at_level_complete(Scene_t* scene)
|
static void at_level_complete(Scene_t* scene)
|
||||||
{
|
{
|
||||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
set_level_completed(data->current_level, true);
|
|
||||||
data->sm.fractional += scene->delta_time;
|
data->sm.fractional += scene->delta_time;
|
||||||
if (data->sm.fractional > 1.0f)
|
if (data->sm.fractional > 1.0f)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#include "EC.h"
|
#include "EC.h"
|
||||||
|
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
|
||||||
|
#include "save_data.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#define CRITICAL_WATER_OVERLAP 0.4f
|
#define CRITICAL_WATER_OVERLAP 0.4f
|
||||||
|
@ -2157,6 +2159,9 @@ void level_end_detection_system(Scene_t* scene)
|
||||||
|
|
||||||
}
|
}
|
||||||
destroy_entity(scene, &lvl_scene->data.tilemap, p_other_ent);
|
destroy_entity(scene, &lvl_scene->data.tilemap, p_other_ent);
|
||||||
|
|
||||||
|
set_level_completed(lvl_scene->data.current_level, true);
|
||||||
|
writeout_savedata();
|
||||||
change_level_state(&lvl_scene->data, LEVEL_STATE_COMPLETE);
|
change_level_state(&lvl_scene->data, LEVEL_STATE_COMPLETE);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#include "save_data.h"
|
#include "save_data.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
// Bit flags for level completion.
|
// Bit flags for level completion.
|
||||||
// Expect 30 levels.
|
// Expect 30 levels.
|
||||||
|
@ -9,14 +12,24 @@
|
||||||
#define NUMBER_OF_BYTES 4
|
#define NUMBER_OF_BYTES 4
|
||||||
static uint8_t completion_flags[NUMBER_OF_BYTES] = {0};
|
static uint8_t completion_flags[NUMBER_OF_BYTES] = {0};
|
||||||
|
|
||||||
int load_savedata(uint8_t* bytes, size_t len)
|
int load_savedata()
|
||||||
{
|
{
|
||||||
|
int len = 0;
|
||||||
|
unsigned char* data = LoadFileData(SAVE_FILE_NAME, &len);
|
||||||
|
if (data != NULL)
|
||||||
|
{
|
||||||
|
if (len == NUMBER_OF_BYTES)
|
||||||
|
{
|
||||||
|
memcpy(completion_flags, data, NUMBER_OF_BYTES);
|
||||||
|
}
|
||||||
|
UnloadFileData(data);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int writeout_savedata(uint8_t* bytes, size_t len)
|
int writeout_savedata()
|
||||||
{
|
{
|
||||||
return 0;
|
return SaveFileData(SAVE_FILE_NAME, completion_flags, NUMBER_OF_BYTES)? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_level_completed(uint32_t level_num)
|
bool is_level_completed(uint32_t level_num)
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
int load_savedata(uint8_t* bytes, size_t len);
|
int load_savedata();
|
||||||
int writeout_savedata(uint8_t* bytes, size_t len);
|
int writeout_savedata();
|
||||||
|
|
||||||
bool is_level_completed(uint32_t level_num);
|
bool is_level_completed(uint32_t level_num);
|
||||||
void set_level_completed(uint32_t level_num, bool complete);
|
void set_level_completed(uint32_t level_num, bool complete);
|
||||||
|
|
Loading…
Reference in New Issue