diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-09-27 17:03:06 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2022-11-01 16:26:16 +0100 |
| commit | 980858186149651df5543b6fc99a4f7db0cdd089 (patch) | |
| tree | d347200b0a562d84df505097651ad0642f207fdd /src/settings | |
| parent | 39f50e601d395bbd2d78d0147ac530b756da2fff (diff) | |
| download | jancity-980858186149651df5543b6fc99a4f7db0cdd089.tar.gz | |
WIP
Diffstat (limited to 'src/settings')
| -rw-r--r-- | src/settings/CMakeLists.txt | 13 | ||||
| -rw-r--r-- | src/settings/inc/settings.h | 36 | ||||
| -rw-r--r-- | src/settings/ps1/inc/settings/port.h | 16 | ||||
| -rw-r--r-- | src/settings/sdl-1.2/inc/settings/port.h | 15 | ||||
| -rw-r--r-- | src/settings/src/settings.c | 48 |
5 files changed, 128 insertions, 0 deletions
diff --git a/src/settings/CMakeLists.txt b/src/settings/CMakeLists.txt new file mode 100644 index 0000000..f7442e4 --- /dev/null +++ b/src/settings/CMakeLists.txt @@ -0,0 +1,13 @@ +add_library(settings + "src/settings.c" +) +set(inc "inc") + +if(PS1_BUILD) + set(inc ${inc} "ps1/inc") +elseif(SDL1_2_BUILD) + set(inc ${inc} "sdl-1.2/inc") +endif() + +target_include_directories(settings PUBLIC ${inc}) +target_link_libraries(settings PUBLIC game peripheral PRIVATE gfx) diff --git a/src/settings/inc/settings.h b/src/settings/inc/settings.h new file mode 100644 index 0000000..25e73b9 --- /dev/null +++ b/src/settings/inc/settings.h @@ -0,0 +1,36 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#include <settings/port.h> +#include <game.h> +#include <peripheral.h> +#include <stdbool.h> + +#ifdef __cplusplus +extern "C" +{ +#endif + +struct settings +{ + short screen_w, screen_h; + bool fullscreen; + enum peripheral_type periph_type; + int pad_i; + char name[GAME_PLAYER_NAME_LEN]; +}; + +struct settings_rt +{ + union peripheral *p; +}; + +int settings_load_ex(const char *path, struct settings *s); +int settings_apply(const struct settings *s, const struct settings_rt *r); +int settings_save_ex(const char *path, const struct settings *s); + +#ifdef __cplusplus +} +#endif + +#endif /* SETTINGS_H */ diff --git a/src/settings/ps1/inc/settings/port.h b/src/settings/ps1/inc/settings/port.h new file mode 100644 index 0000000..2792717 --- /dev/null +++ b/src/settings/ps1/inc/settings/port.h @@ -0,0 +1,16 @@ +#ifndef SETTINGS_PORT_H +#define SETTINGS_PORT_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define settings_load(path, s) settings_load_ex("bu00:\\" path, s) +#define settings_save(path, s) settings_save_ex("bu00:\\" path, s) + +#ifdef __cplusplus +} +#endif + +#endif /* SETTINGS_PORT_H */ diff --git a/src/settings/sdl-1.2/inc/settings/port.h b/src/settings/sdl-1.2/inc/settings/port.h new file mode 100644 index 0000000..6332842 --- /dev/null +++ b/src/settings/sdl-1.2/inc/settings/port.h @@ -0,0 +1,15 @@ +#ifndef SETTINGS_PORT_H +#define SETTINGS_PORT_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define settings_load(...) settings_load_ex(__VA_ARGS__) + +#ifdef __cplusplus +} +#endif + +#endif /* SETTINGS_PORT_H */ diff --git a/src/settings/src/settings.c b/src/settings/src/settings.c new file mode 100644 index 0000000..0427ef8 --- /dev/null +++ b/src/settings/src/settings.c @@ -0,0 +1,48 @@ +#include <settings.h> +#include <gfx.h> +#include <peripheral.h> +#include <stdio.h> + +int settings_apply(const struct settings *const s, + const struct settings_rt *const r) +{ + if (gfx_fullscreen_available() + && gfx_set_fullscreen(s->screen_w, s->screen_h)) + return -1; + + const struct peripheral_cfg cfg = + { + .padn = s->pad_i, + .type = s->periph_type + }; + + peripheral_init(&cfg, r->p); + return 0; +} + +int settings_load_ex(const char *const path, struct settings *const s) +{ + int ret = -1; + FILE *const f = fopen(path, "rb"); + + if (!f) + goto end; + + ret = 0; + +end: + if (ret) + { + *s = (const struct settings) + { + .name = "Player", + }; + + gfx_display_size(&s->screen_w, &s->screen_h); + } + + if (f) + fclose(f); + + return ret; +} |
