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
|
||||
.gdb_history
|
||||
heaptrack.*
|
||||
save.dat
|
||||
|
|
2
main.c
2
main.c
|
@ -4,6 +4,7 @@
|
|||
#include "ent_impl.h"
|
||||
#include "mempool.h"
|
||||
#include "constants.h"
|
||||
#include "save_data.h"
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#define N_SCENES 4
|
||||
|
@ -29,6 +30,7 @@ int main(void)
|
|||
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
||||
init_engine(&engine, (Vector2){screenWidth, screenHeight});
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
load_savedata();
|
||||
#ifndef NDEBUG
|
||||
load_from_infofile("res/assets.info.raw", &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)
|
||||
{
|
||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
set_level_completed(data->current_level, true);
|
||||
|
||||
data->sm.fractional += scene->delta_time;
|
||||
if (data->sm.fractional > 1.0f)
|
||||
{
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include "EC.h"
|
||||
|
||||
#include "constants.h"
|
||||
|
||||
#include "save_data.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#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);
|
||||
|
||||
set_level_completed(lvl_scene->data.current_level, true);
|
||||
writeout_savedata();
|
||||
change_level_state(&lvl_scene->data, LEVEL_STATE_COMPLETE);
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#include "save_data.h"
|
||||
#include "constants.h"
|
||||
#include "raylib.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
// Bit flags for level completion.
|
||||
// Expect 30 levels.
|
||||
|
@ -9,14 +12,24 @@
|
|||
#define NUMBER_OF_BYTES 4
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
int load_savedata(uint8_t* bytes, size_t len);
|
||||
int writeout_savedata(uint8_t* bytes, size_t len);
|
||||
int load_savedata();
|
||||
int writeout_savedata();
|
||||
|
||||
bool is_level_completed(uint32_t level_num);
|
||||
void set_level_completed(uint32_t level_num, bool complete);
|
||||
|
|
Loading…
Reference in New Issue