42 std::ifstream file(filename);
43 if (!file.is_open()) {
44 log::error(
"Failed to load client.json from: {}", filename);
50 bool inControls =
false;
52 while (std::getline(file, line)) {
53 if (line.find(
"\"audio\"") != std::string::npos) {
57 }
else if (line.find(
"\"controls\"") != std::string::npos) {
61 }
else if (line.find(
"}") !=
63 line.find(
"{") == std::string::npos) {
69 if (line.find(
"\"masterVolume\"") != std::string::npos) {
70 size_t colonPos = line.find(
':');
71 if (colonPos != std::string::npos) {
72 std::string valueStr = line.substr(colonPos + 1);
74 std::remove(valueStr.begin(), valueStr.end(),
','),
78 }
else if (line.find(
"\"musicVolume\"") != std::string::npos) {
79 size_t colonPos = line.find(
':');
80 if (colonPos != std::string::npos) {
81 std::string valueStr = line.substr(colonPos + 1);
83 std::remove(valueStr.begin(), valueStr.end(),
','),
87 }
else if (line.find(
"\"sfxVolume\"") != std::string::npos) {
88 size_t colonPos = line.find(
':');
89 if (colonPos != std::string::npos) {
90 std::string valueStr = line.substr(colonPos + 1);
92 std::remove(valueStr.begin(), valueStr.end(),
','),
100 auto parseKeyBinding = [&](
const std::string &jsonKey,
102 if (line.find(jsonKey) != std::string::npos) {
103 size_t start = line.find(
'"', line.find(
':')) + 1;
104 size_t end = line.find(
'"', start);
107 end != std::string::npos) {
108 std::string keyName =
109 line.substr(start, end - start);
124 log::info(
"Loaded default settings from client.json");
130 static const std::unordered_map<std::string, sf::Keyboard::Key> keyMap =
132 {
"A", sf::Keyboard::Key::A },
133 {
"B", sf::Keyboard::Key::B },
134 {
"C", sf::Keyboard::Key::C },
135 {
"D", sf::Keyboard::Key::D },
136 {
"E", sf::Keyboard::Key::E },
137 {
"F", sf::Keyboard::Key::F },
138 {
"G", sf::Keyboard::Key::G },
139 {
"H", sf::Keyboard::Key::H },
140 {
"I", sf::Keyboard::Key::I },
141 {
"J", sf::Keyboard::Key::J },
142 {
"K", sf::Keyboard::Key::K },
143 {
"L", sf::Keyboard::Key::L },
144 {
"M", sf::Keyboard::Key::M },
145 {
"N", sf::Keyboard::Key::N },
146 {
"O", sf::Keyboard::Key::O },
147 {
"P", sf::Keyboard::Key::P },
148 {
"Q", sf::Keyboard::Key::Q },
149 {
"R", sf::Keyboard::Key::R },
150 {
"S", sf::Keyboard::Key::S },
151 {
"T", sf::Keyboard::Key::T },
152 {
"U", sf::Keyboard::Key::U },
153 {
"V", sf::Keyboard::Key::V },
154 {
"W", sf::Keyboard::Key::W },
155 {
"X", sf::Keyboard::Key::X },
156 {
"Y", sf::Keyboard::Key::Y },
157 {
"Z", sf::Keyboard::Key::Z },
158 {
"Space", sf::Keyboard::Key::Space },
159 {
"Escape", sf::Keyboard::Key::Escape},
160 {
"Tab", sf::Keyboard::Key::Tab },
161 {
"Up", sf::Keyboard::Key::Up },
162 {
"Down", sf::Keyboard::Key::Down },
163 {
"Left", sf::Keyboard::Key::Left },
164 {
"Right", sf::Keyboard::Key::Right }
167 auto it = keyMap.find(keyName);
168 return (it != keyMap.end()) ? it->second : sf::Keyboard::Key::Unknown;
187 static const std::unordered_map<sf::Keyboard::Key, std::string>
189 {sf::Keyboard::Key::A,
"A" },
190 {sf::Keyboard::Key::B,
"B" },
191 {sf::Keyboard::Key::C,
"C" },
192 {sf::Keyboard::Key::D,
"D" },
193 {sf::Keyboard::Key::E,
"E" },
194 {sf::Keyboard::Key::F,
"F" },
195 {sf::Keyboard::Key::G,
"G" },
196 {sf::Keyboard::Key::H,
"H" },
197 {sf::Keyboard::Key::I,
"I" },
198 {sf::Keyboard::Key::J,
"J" },
199 {sf::Keyboard::Key::K,
"K" },
200 {sf::Keyboard::Key::L,
"L" },
201 {sf::Keyboard::Key::M,
"M" },
202 {sf::Keyboard::Key::N,
"N" },
203 {sf::Keyboard::Key::O,
"O" },
204 {sf::Keyboard::Key::P,
"P" },
205 {sf::Keyboard::Key::Q,
"Q" },
206 {sf::Keyboard::Key::R,
"R" },
207 {sf::Keyboard::Key::S,
"S" },
208 {sf::Keyboard::Key::T,
"T" },
209 {sf::Keyboard::Key::U,
"U" },
210 {sf::Keyboard::Key::V,
"V" },
211 {sf::Keyboard::Key::W,
"W" },
212 {sf::Keyboard::Key::X,
"X" },
213 {sf::Keyboard::Key::Y,
"Y" },
214 {sf::Keyboard::Key::Z,
"Z" },
215 {sf::Keyboard::Key::Space,
"Space" },
216 {sf::Keyboard::Key::Escape,
"Escape"},
217 {sf::Keyboard::Key::Tab,
"Tab" },
218 {sf::Keyboard::Key::Left,
"Left" },
219 {sf::Keyboard::Key::Right,
"Right" },
220 {sf::Keyboard::Key::Up,
"Up" },
221 {sf::Keyboard::Key::Down,
"Down" }
224 auto it = keyNames.find(key);
225 return (it != keyNames.end()) ? it->second :
"Unknown";