Move music tracks out of akgl_Game to make it more suitable for serialization
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#ifndef _SDL_GAMECONTROLLERDB_H_
|
#ifndef _SDL_GAMECONTROLLERDB_H_
|
||||||
#define _SDL_GAMECONTROLLERDB_H_
|
#define _SDL_GAMECONTROLLERDB_H_
|
||||||
|
|
||||||
// Taken from https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/refs/heads/master/gamecontrollerdb.txt on Fri May 8 10:01:12 PM EDT 2026
|
// Taken from https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/refs/heads/master/gamecontrollerdb.txt on Fri May 8 10:15:45 PM EDT 2026
|
||||||
|
|
||||||
#define AKGL_SDL_GAMECONTROLLER_DB_LEN 2227
|
#define AKGL_SDL_GAMECONTROLLER_DB_LEN 2227
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ typedef struct {
|
|||||||
} akgl_GameState;
|
} akgl_GameState;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char name[256];
|
|
||||||
char version[32];
|
char version[32];
|
||||||
|
char name[256];
|
||||||
char uri[256];
|
char uri[256];
|
||||||
int16_t screenwidth;
|
int16_t screenwidth;
|
||||||
int16_t screenheight;
|
int16_t screenheight;
|
||||||
@@ -36,14 +36,14 @@ typedef struct {
|
|||||||
SDL_Time lastIterTime;
|
SDL_Time lastIterTime;
|
||||||
SDL_Time lastFPSTime;
|
SDL_Time lastFPSTime;
|
||||||
int16_t framesSinceUpdate;
|
int16_t framesSinceUpdate;
|
||||||
MIX_Mixer *mixer;
|
|
||||||
MIX_Track *tracks[AKGL_GAME_AUDIO_MAX_TRACKS];
|
|
||||||
} akgl_Game;
|
} akgl_Game;
|
||||||
|
|
||||||
extern SDL_Window *window;
|
extern SDL_Window *window;
|
||||||
extern SDL_Renderer *renderer;
|
extern SDL_Renderer *renderer;
|
||||||
extern akgl_Tilemap gamemap;
|
extern akgl_Tilemap gamemap;
|
||||||
extern MIX_Audio *bgm;
|
extern MIX_Audio *bgm;
|
||||||
|
extern MIX_Mixer *akgl_mixer;
|
||||||
|
extern MIX_Track *akgl_tracks[AKGL_GAME_AUDIO_MAX_TRACKS];
|
||||||
extern SDL_FRect camera;
|
extern SDL_FRect camera;
|
||||||
extern akgl_Game game;
|
extern akgl_Game game;
|
||||||
|
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ akerr_ErrorContext *akgl_load_start_bgm(char *fname)
|
|||||||
|
|
||||||
//SDL_snprintf((char *)&tmpstr->data, AKGL_MAX_STRING_LENGTH, "%s%s", SDL_GetBasePath(), fname);
|
//SDL_snprintf((char *)&tmpstr->data, AKGL_MAX_STRING_LENGTH, "%s%s", SDL_GetBasePath(), fname);
|
||||||
SDL_Log("Loading music asset from %s", fname);
|
SDL_Log("Loading music asset from %s", fname);
|
||||||
bgm = MIX_LoadAudio(game.mixer, fname, true);
|
bgm = MIX_LoadAudio(akgl_mixer, fname, true);
|
||||||
FAIL_ZERO_BREAK(errctx, bgm, AKERR_NULLPOINTER, "Failed to load music asset %s : %s", fname, SDL_GetError());
|
FAIL_ZERO_BREAK(errctx, bgm, AKERR_NULLPOINTER, "Failed to load music asset %s : %s", fname, SDL_GetError());
|
||||||
|
|
||||||
bgmtrack = MIX_CreateTrack(game.mixer);
|
bgmtrack = MIX_CreateTrack(akgl_mixer);
|
||||||
FAIL_ZERO_BREAK(errctx, bgmtrack, AKERR_NULLPOINTER, "Failed to create audio track for background music: %s", SDL_GetError());
|
FAIL_ZERO_BREAK(errctx, bgmtrack, AKERR_NULLPOINTER, "Failed to create audio track for background music: %s", SDL_GetError());
|
||||||
|
|
||||||
game.tracks[AKGL_GAME_AUDIO_TRACK_BGM] = bgmtrack;
|
akgl_tracks[AKGL_GAME_AUDIO_TRACK_BGM] = bgmtrack;
|
||||||
|
|
||||||
FAIL_ZERO_BREAK(
|
FAIL_ZERO_BREAK(
|
||||||
errctx,
|
errctx,
|
||||||
|
|||||||
29
src/game.c
29
src/game.c
@@ -23,8 +23,8 @@ akgl_Frame paddle2;
|
|||||||
akgl_Frame table;
|
akgl_Frame table;
|
||||||
akgl_Tilemap gamemap;
|
akgl_Tilemap gamemap;
|
||||||
MIX_Audio *bgm = NULL;
|
MIX_Audio *bgm = NULL;
|
||||||
MIX_Mixer *GAME_mixer = NULL;
|
MIX_Mixer *akgl_mixer = NULL;
|
||||||
MIX_Track *GAME_tracks[64];
|
MIX_Track *akgl_tracks[AKGL_GAME_AUDIO_MAX_TRACKS];
|
||||||
SDL_FRect camera;
|
SDL_FRect camera;
|
||||||
akgl_Game game;
|
akgl_Game game;
|
||||||
|
|
||||||
@@ -86,10 +86,10 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_game_init()
|
|||||||
AKGL_ERR_SDL,
|
AKGL_ERR_SDL,
|
||||||
"Couldn't initialize audio: %s",
|
"Couldn't initialize audio: %s",
|
||||||
SDL_GetError());
|
SDL_GetError());
|
||||||
game.mixer = MIX_CreateMixerDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, 0);
|
akgl_mixer = MIX_CreateMixerDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, 0);
|
||||||
FAIL_ZERO_RETURN(
|
FAIL_ZERO_RETURN(
|
||||||
errctx,
|
errctx,
|
||||||
game.mixer,
|
akgl_mixer,
|
||||||
AKGL_ERR_SDL,
|
AKGL_ERR_SDL,
|
||||||
"Unable to create mixer device: %s",
|
"Unable to create mixer device: %s",
|
||||||
SDL_GetError());
|
SDL_GetError());
|
||||||
@@ -134,6 +134,27 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_game_save(char *fpath)
|
|||||||
|
|
||||||
akerr_ErrorContext AKERR_NOIGNORE *akgl_game_load(char *fpath)
|
akerr_ErrorContext AKERR_NOIGNORE *akgl_game_load(char *fpath)
|
||||||
{
|
{
|
||||||
|
FILE *fp = NULL;
|
||||||
|
char version[32];
|
||||||
|
|
||||||
PREPARE_ERROR(errctx);
|
PREPARE_ERROR(errctx);
|
||||||
|
FAIL_ZERO_RETURN(errctx, fpath, AKERR_NULLPOINTER, "NULL file path");
|
||||||
|
fp = fopen(fpath, "rb");
|
||||||
|
FAIL_ZERO_RETURN(
|
||||||
|
errctx,
|
||||||
|
(fread((void *)&version, 1, 32, fp) < 32),
|
||||||
|
AKERR_IO,
|
||||||
|
"Corrupt save file");
|
||||||
|
FAIL_ZERO_RETURN(
|
||||||
|
errctx,
|
||||||
|
strncmp((char *)&game.version, (char *)&version, 32),
|
||||||
|
AKERR_API,
|
||||||
|
"Save game can not be loaded, it is from an incompatible version");
|
||||||
|
rewind(fp);
|
||||||
|
FAIL_ZERO_RETURN(
|
||||||
|
errctx,
|
||||||
|
(fread((void *)&game, 1, sizeof(akgl_Game), fp) < sizeof(akgl_Game)),
|
||||||
|
AKERR_IO,
|
||||||
|
"Corrupt save file");
|
||||||
SUCCEED(errctx);
|
SUCCEED(errctx);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user