R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
AccessibilitySettings.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2026
3** r-type
4** File description:
5** AccessibilitySettings - Struct for storing accessibility settings with binary save/load
6*/
7
8#pragma once
9
10#include <cstdint>
11#include <cstdio>
12#include <cstring>
13
14namespace Settings {
15
19 constexpr uint32_t SETTINGS_MAGIC = 0x52545950; // "RTYP"
20
24 constexpr uint32_t SETTINGS_VERSION = 1;
25
29 constexpr const char *SETTINGS_FILE_PATH = ".rtype_settings";
30
34 enum class ColorblindFilterType : uint8_t {
35 NONE = 0,
36 PROTANOPIA = 1,
37 DEUTERANOPIA = 2,
38 TRITANOPIA = 3,
39 MONOCHROMACY = 4
40 };
41
48#pragma pack(push, 1)
50 // Header for validation
51 uint32_t magic;
52 uint32_t version;
53
54 // Accessibility settings
57 uint8_t padding[2];
58
70
74 [[nodiscard]] bool IsValid() const { return magic == SETTINGS_MAGIC && version <= SETTINGS_VERSION; }
75 };
76#pragma pack(pop)
77
84 inline bool SaveSettings(const AccessibilitySettings &settings,
85 const char *filePath = SETTINGS_FILE_PATH) {
86 FILE *file = fopen(filePath, "wb");
87 if (!file) {
88 return false;
89 }
90
91 size_t written = fwrite(&settings, sizeof(AccessibilitySettings), 1, file);
92 fclose(file);
93
94 return written == 1;
95 }
96
103 inline bool LoadSettings(AccessibilitySettings &settings, const char *filePath = SETTINGS_FILE_PATH) {
104 FILE *file = fopen(filePath, "rb");
105 if (!file) {
106 // File doesn't exist - use defaults
107 settings.SetDefaults();
108 return false;
109 }
110
111 size_t read = fread(&settings, sizeof(AccessibilitySettings), 1, file);
112 fclose(file);
113
114 if (read != 1 || !settings.IsValid()) {
115 // Invalid file - use defaults
116 settings.SetDefaults();
117 return false;
118 }
119
120 return true;
121 }
122
128 inline bool SettingsFileExists(const char *filePath = SETTINGS_FILE_PATH) {
129 FILE *file = fopen(filePath, "rb");
130 if (file) {
131 fclose(file);
132 return true;
133 }
134 return false;
135 }
136
137} // namespace Settings
ColorblindFilterType
Colorblind filter types (matches AccessibilityMenu::ColorblindFilter)
constexpr const char * SETTINGS_FILE_PATH
Default settings file path.
bool SettingsFileExists(const char *filePath=SETTINGS_FILE_PATH)
Check if settings file exists.
bool SaveSettings(const AccessibilitySettings &settings, const char *filePath=SETTINGS_FILE_PATH)
Save accessibility settings to file (C-style binary write)
constexpr uint32_t SETTINGS_VERSION
Current settings version for forward compatibility.
constexpr uint32_t SETTINGS_MAGIC
Magic number to identify valid settings files.
bool LoadSettings(AccessibilitySettings &settings, const char *filePath=SETTINGS_FILE_PATH)
Load accessibility settings from file (C-style binary read)
Binary struct for storing accessibility settings.
uint8_t visualSoundIndicators
Visual sound indicators (0 = off, 1 = on)
bool IsValid() const
Check if the settings struct has valid header.
uint32_t magic
Magic number for file validation.
ColorblindFilterType colorblindFilter
Colorblind filter type.
uint8_t padding[2]
Padding for alignment.
uint32_t version
Settings version for compatibility.
void SetDefaults()
Initialize with default values.