Peoplemon  0.1.0
Peoplemon 3 game source documentation
Properties.cpp
Go to the documentation of this file.
1 #include <Core/Properties.hpp>
2 
3 #include <BLIB/Engine/Configuration.hpp>
4 #include <BLIB/Resources.hpp>
5 #include <BLIB/Util/FileUtil.hpp>
6 #include <Core/Resources.hpp>
7 
8 namespace core
9 {
10 namespace
11 {
12 const std::string DataDirectory = bl::util::FileUtil::getDataDirectory("Peoplemon");
13 const std::string ConfigFile = bl::util::FileUtil::joinPath(DataDirectory, "configuration.cfg");
14 bool inEditor = false;
15 
16 namespace defaults
17 {
18 const std::string WindowIconFile = "Resources/Images/icon.png";
19 constexpr int WindowWidth = 800;
20 constexpr int WindowHeight = 600;
21 
22 constexpr int PixelsPerTile = 32;
23 constexpr int ExtraRenderTiles = 10;
24 constexpr int LightingWidth = 25;
25 constexpr int LightingHeight = 19;
26 
27 const std::string ImagePath = "Resources/Images";
28 const std::string MenuImagePath = "Resources/Images/Menus";
29 const std::string SpritesheetPath = "Resources/Images/Spritesheets";
30 const std::string MusicPath = "Resources/Audio/Music";
31 const std::string PlaylistPath = "Resources/Audio/Playlists";
32 const std::string MenuFont = "Resources/Fonts/Menu.ttf";
33 const std::string AnimationPath = "Resources/Animations";
34 const std::string SoundPath = "Resources/Audio/Sounds";
35 
36 const std::string MapPath = "Resources/Maps/Maps";
37 const std::string TilesetPath = "Resources/Maps/Tilesets";
38 const std::string MapTilePath = "Resources/Maps/Tiles/Sprites";
39 const std::string MapAnimationPath = "Resources/Maps/Tiles/Animations";
40 
41 const std::string ThunderSoundFile = "Resources/Audio/Sounds/Weather/thunder.wav";
42 const std::string LightRainSoundFile = "Resources/Audio/Sounds/Weather/lightRain.wav";
43 const std::string HardRainSoundFile = "Resources/Audio/Sounds/Weather/hardRain.wav";
44 
45 const std::string RainDropFile = "Resources/Images/Weather/raindrop.png";
46 const std::string RainSplash1File = "Resources/Images/Weather/rainSplash1.png";
47 const std::string RainSplash2File = "Resources/Images/Weather/rainSplash2.png";
48 const std::string SnowFlakeFile = "Resources/Images/Weather/snowflake.png";
49 const std::string FogFile = "Resources/Images/Weather/fog.png";
50 const std::string SandPatchFile = "Resources/Images/Weather/sandMain.png";
51 const std::string SandSwirlFile = "Resources/Images/Weather/sandSwirl.png";
52 
53 constexpr float FrequentThunderMinInt = 8.f;
54 constexpr float FrequentThunderMaxInt = 15.f;
55 constexpr float InfrequentThunderMinInt = 15.f;
56 constexpr float InfrequentThunderMaxInt = 40.f;
57 
58 constexpr unsigned int LightRainDropCount = 700;
59 constexpr unsigned int HardRainDropCount = 1700;
60 constexpr unsigned int LightSnowFlakeCount = 1500;
61 constexpr unsigned int HardSnowFlakeCount = 4000;
62 
63 constexpr unsigned int ThickFogAlpha = 135;
64 constexpr unsigned int ThinFogAlpha = 90;
65 
66 constexpr int LightRainLightModifier = 22;
67 constexpr int HardRainLightModifier = 35;
68 constexpr int LightSnowLightModifier = 15;
69 constexpr int HardSnowLightModifier = 30;
70 constexpr int ThinFogLightModifier = 20;
71 constexpr int ThickFogLightModifier = 50;
72 constexpr int SunnyLightModifier = 20;
73 constexpr int SandstormLightModifier = 30;
74 
75 const std::string NpcFileExtension = "npc";
76 const std::string NpcPath = "Resources/Characters/NPCs";
77 const std::string TrainerFileExtension = "tnr";
78 const std::string TrainerPath = "Resources/Characters/Trainers";
79 const std::string ConversationPath = "Resources/Characters/Conversations";
80 const std::string ConversationFileExtension = "conv";
81 const std::string LegacyPeoplemonPath = "Resources/Characters/LegacyPeoplemon";
82 
83 const std::string CharacterAnimationPath = "Resources/Characters/Animations";
84 constexpr float CharacterMoveSpeed = 81.f;
85 constexpr float FastCharacterMoveSpeed = 205.f;
86 
87 const std::string BoyPlayerAnims =
88  bl::util::FileUtil::joinPath(CharacterAnimationPath, "BoyPlayer");
89 const std::string GirlPlayerAnims =
90  bl::util::FileUtil::joinPath(CharacterAnimationPath, "GirlPlayer");
91 
92 const float CharacterSpinPeriod = 1.75f;
93 
94 const std::string ItemMetadataFile = "Resources/Config/items.db";
95 const std::string ItemSprite = "Resources/Images/item.png";
96 
97 const float GhostWriterSpeed = 16.f;
98 const std::string TextboxFile = "Resources/Images/Menus/HUD/messageBox.png";
99 const unsigned int HudFontSize = 20;
100 
101 const std::string ScriptPath = "Resources/Scripts";
102 
103 constexpr float ScreenFadePeriod = 2.f;
104 
105 const std::string PeoplemonDBFile = "Resources/Config/peoplemon.db";
106 const std::string MoveDBFile = "Resources/Config/moves.db";
107 
108 const std::string PeoplemonImageFolder = "Resources/Images/Peoplemon";
109 
110 constexpr unsigned int WildPeoplemonChance = 15;
111 const std::string TrainerExclaimSound = "Resources/Audio/Sounds/trainer.ogg";
112 const std::string TrainerExclaimImage = "Resources/Images/trainer.png";
113 
114 } // namespace defaults
115 
116 bl::resource::Ref<sf::VulkanFont> menuFont;
117 } // namespace
118 
119 bool Properties::load(bool ie) {
120  inEditor = ie;
121 
122  // These must be set for playlists and animations to work properly
123  bl::engine::Configuration::set("blib.playlist.song_path", defaults::MusicPath);
124  bl::engine::Configuration::set("blib.animation.spritesheet_path", defaults::SpritesheetPath);
125 
126  bl::engine::Configuration::set("core.window.icon", defaults::WindowIconFile);
127  bl::engine::Configuration::set("core.window.width", defaults::WindowWidth);
128  bl::engine::Configuration::set("core.window.height", defaults::WindowHeight);
129 
130  bl::engine::Configuration::set("core.render.pixels_per_tile", defaults::PixelsPerTile);
131  bl::engine::Configuration::set("core.render.extra_render_tiles", defaults::ExtraRenderTiles);
132  bl::engine::Configuration::set("core.render.lighting_width", defaults::LightingWidth);
133  bl::engine::Configuration::set("core.render.lighting_height", defaults::LightingHeight);
134 
135  bl::engine::Configuration::set("core.menu.image_path", defaults::MenuImagePath);
136  bl::engine::Configuration::set("core.menu.primary_font", defaults::MenuFont);
137  bl::engine::Configuration::set("core.music.path", defaults::MusicPath);
138  bl::engine::Configuration::set("core.music.playlist_path", defaults::PlaylistPath);
139  bl::engine::Configuration::set("core.anims.path", defaults::AnimationPath);
140  bl::engine::Configuration::set("core.imgs.path", defaults::ImagePath);
141  bl::engine::Configuration::set("core.audio.sound_path", defaults::SoundPath);
142 
143  bl::engine::Configuration::set("core.map.path", defaults::MapPath);
144  bl::engine::Configuration::set("core.map.tileset_path", defaults::TilesetPath);
145  bl::engine::Configuration::set("core.map.tile_path", defaults::MapTilePath);
146  bl::engine::Configuration::set("core.map.anim_path", defaults::MapAnimationPath);
147 
148  bl::engine::Configuration::set("core.weather.thunder", defaults::ThunderSoundFile);
149  bl::engine::Configuration::set("core.weather.lightrain", defaults::LightRainSoundFile);
150  bl::engine::Configuration::set("core.weather.hardrain", defaults::HardRainSoundFile);
151 
152  bl::engine::Configuration::set("core.weather.raindrop", defaults::RainDropFile);
153  bl::engine::Configuration::set("core.weather.rainsplash1", defaults::RainSplash1File);
154  bl::engine::Configuration::set("core.weather.rainsplash2", defaults::RainSplash2File);
155  bl::engine::Configuration::set("core.weather.snowflake", defaults::SnowFlakeFile);
156  bl::engine::Configuration::set("core.weather.fog", defaults::FogFile);
157  bl::engine::Configuration::set("core.weather.sandpatch", defaults::SandPatchFile);
158  bl::engine::Configuration::set("core.weather.sandswirl", defaults::SandSwirlFile);
159 
160  bl::engine::Configuration::set("core.weather.thunder.freq.min",
161  defaults::FrequentThunderMinInt);
162  bl::engine::Configuration::set("core.weather.thunder.freq.max",
163  defaults::FrequentThunderMaxInt);
164  bl::engine::Configuration::set("core.weather.thunder.infreq.min",
165  defaults::InfrequentThunderMinInt);
166  bl::engine::Configuration::set("core.weather.thunder.infreq.max",
167  defaults::InfrequentThunderMaxInt);
168 
169  bl::engine::Configuration::set("core.weather.lightrain_particles",
170  defaults::LightRainDropCount);
171  bl::engine::Configuration::set("core.weather.hardrain_particles", defaults::HardRainDropCount);
172  bl::engine::Configuration::set("core.weather.lightsnow_particles",
173  defaults::LightSnowFlakeCount);
174  bl::engine::Configuration::set("core.weather.hardsnow_particles", defaults::HardSnowFlakeCount);
175 
176  bl::engine::Configuration::set("core.weather.fog.thick_alpha", defaults::ThickFogAlpha);
177  bl::engine::Configuration::set("core.weather.fog.thin_alpha", defaults::ThinFogAlpha);
178 
179  bl::engine::Configuration::set("core.weather.lightrain.light",
180  defaults::LightRainLightModifier);
181  bl::engine::Configuration::set("core.weather.hardrain.light", defaults::HardRainLightModifier);
182  bl::engine::Configuration::set("core.weather.lightsnow.light",
183  defaults::LightSnowLightModifier);
184  bl::engine::Configuration::set("core.weather.hardsnow.light", defaults::HardSnowLightModifier);
185  bl::engine::Configuration::set("core.weather.thinfog.light", defaults::ThinFogLightModifier);
186  bl::engine::Configuration::set("core.weather.thickfog.light", defaults::ThickFogLightModifier);
187  bl::engine::Configuration::set("core.weather.sunny.light", defaults::SunnyLightModifier);
188  bl::engine::Configuration::set("core.weather.sandstorm.light",
189  defaults::SandstormLightModifier);
190 
191  bl::engine::Configuration::set("core.npc.extension", defaults::NpcFileExtension);
192  bl::engine::Configuration::set("core.npc.path", defaults::NpcPath);
193  bl::engine::Configuration::set("core.trainer.extension", defaults::TrainerFileExtension);
194  bl::engine::Configuration::set("core.trainer.path", defaults::TrainerPath);
195  bl::engine::Configuration::set("core.conversation.path", defaults::ConversationPath);
196  bl::engine::Configuration::set("core.conversation.extension",
197  defaults::ConversationFileExtension);
198  bl::engine::Configuration::set("core.trainer.pplpath", defaults::LegacyPeoplemonPath);
199 
200  bl::engine::Configuration::set("core.character.animpath", defaults::CharacterAnimationPath);
201  bl::engine::Configuration::set("core.character.speed", defaults::CharacterMoveSpeed);
202  bl::engine::Configuration::set("core.character.fastspeed", defaults::FastCharacterMoveSpeed);
203 
204  bl::engine::Configuration::set("core.player.boy_anims", defaults::BoyPlayerAnims);
205  bl::engine::Configuration::set("core.player.girl_anims", defaults::GirlPlayerAnims);
206 
207  bl::engine::Configuration::set("core.character.spin_period", defaults::CharacterSpinPeriod);
208 
209  bl::engine::Configuration::set("core.items.config", defaults::ItemMetadataFile);
210  bl::engine::Configuration::set("core.items.sprite", defaults::ItemSprite);
211 
212  bl::engine::Configuration::set("blib.interface.ghost_speed", defaults::GhostWriterSpeed);
213  bl::engine::Configuration::set("core.hud.textbox_file", defaults::TextboxFile);
214  bl::engine::Configuration::set("core.hud.font_size", defaults::HudFontSize);
215 
216  bl::engine::Configuration::set("blib.script.path", defaults::ScriptPath);
217 
218  bl::engine::Configuration::set("game.main.fadeout", defaults::ScreenFadePeriod);
219 
220  bl::engine::Configuration::set("core.pplmn.dbfile", defaults::PeoplemonDBFile);
221  bl::engine::Configuration::set("core.moves.dbfile", defaults::MoveDBFile);
222 
223  bl::engine::Configuration::set("core.peoplemon.image_dir", defaults::PeoplemonImageFolder);
224 
225  bl::engine::Configuration::set("core.wild.chance", defaults::WildPeoplemonChance);
226  bl::engine::Configuration::set("core.trainer.img", defaults::TrainerExclaimImage);
227  bl::engine::Configuration::set("core.trainer.sfx", defaults::TrainerExclaimSound);
228 
229  if (!bl::engine::Configuration::load(ConfigFile)) {
230  BL_LOG_INFO << "Failed to load configuration file, using defaults";
231  }
232  bl::engine::Configuration::log();
233  save(); // ensure defaults saved if changed
234 
235  menuFont =
236  FontManager::load(bl::engine::Configuration::get<std::string>("core.menu.primary_font"));
237  if (!menuFont) return false;
238 
239  return true;
240 }
241 
242 void Properties::save() { bl::engine::Configuration::save(ConfigFile); }
243 
244 const std::string& Properties::WindowIconFile() {
245  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
246  "core.window.icon", defaults::WindowIconFile);
247  return val;
248 }
249 
251  static const int val =
252  bl::engine::Configuration::getOrDefault<int>("core.window.width", defaults::WindowWidth);
253  return val;
254 }
255 
257  static const int val =
258  bl::engine::Configuration::getOrDefault<int>("core.window.height", defaults::WindowHeight);
259  return val;
260 }
261 
262 sf::Vector2f Properties::WindowSize() {
263  return {static_cast<float>(WindowWidth()), static_cast<float>(WindowHeight())};
264 }
265 
266 bool Properties::InEditor() { return inEditor; }
267 
268 const std::string& Properties::SaveDirectory() {
269  static const std::string d = bl::util::FileUtil::joinPath(DataDirectory, "saves");
270  if (!bl::util::FileUtil::directoryExists(d)) { bl::util::FileUtil::createDirectory(d); }
271  return d;
272 }
273 
274 const std::string& Properties::SaveExtension() {
275  static const std::string e = "psf";
276  return e;
277 }
278 
280  static const int val = bl::engine::Configuration::getOrDefault<int>(
281  "core.render.pixels_per_tile", defaults::PixelsPerTile);
282  return val;
283 }
284 
286  static const int val = bl::engine::Configuration::getOrDefault<int>(
287  "core.render.extra_render_tiles", defaults::ExtraRenderTiles);
288  return val;
289 }
290 
292  static const int val = bl::engine::Configuration::getOrDefault<int>(
293  "core.render.lighting_width", defaults::LightingWidth);
294  return val;
295 }
296 
298  static const int val = bl::engine::Configuration::getOrDefault<int>(
299  "core.render.lighting_height", defaults::LightingHeight);
300  return val;
301 }
302 
303 const std::string& Properties::MenuImagePath() {
304  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
305  "core.menu.image_path", defaults::MenuImagePath);
306  return val;
307 }
308 
309 const std::string& Properties::SpritesheetPath() {
310  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
311  "blib.animation.spritesheet_path", defaults::SpritesheetPath);
312  return val;
313 }
314 
315 const std::string& Properties::MusicPath() {
316  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
317  "core.music.path", defaults::MusicPath);
318  return val;
319 }
320 
321 const std::string& Properties::PlaylistPath() {
322  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
323  "core.music.playlist_path", defaults::PlaylistPath);
324  return val;
325 }
326 
327 const std::string& Properties::AnimationPath() {
328  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
329  "core.anims.path", defaults::AnimationPath);
330  return val;
331 }
332 
333 const std::string& Properties::ImagePath() {
334  static const std::string val =
335  bl::engine::Configuration::getOrDefault<std::string>("core.imgs.path", defaults::ImagePath);
336  return val;
337 }
338 
339 const std::string& Properties::MapPath() {
340  static const std::string val =
341  bl::engine::Configuration::getOrDefault<std::string>("core.map.path", defaults::MapPath);
342  return val;
343 }
344 
345 const std::string& Properties::TilesetPath() {
346  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
347  "core.map.tileset_path", defaults::TilesetPath);
348  return val;
349 }
350 
351 const std::string& Properties::MapTilePath() {
352  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
353  "core.map.tile_path", defaults::MapTilePath);
354  return val;
355 }
356 
357 const std::string& Properties::MapAnimationPath() {
358  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
359  "core.map.anim_path", defaults::MapAnimationPath);
360  return val;
361 }
362 
363 const sf::VulkanFont& Properties::MenuFont() { return *menuFont; }
364 
365 const std::string& Properties::ThunderSoundFile() {
366  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
367  "core.weather.thunder", defaults::ThunderSoundFile);
368  return val;
369 }
370 
371 const std::string& Properties::LightRainSoundFile() {
372  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
373  "core.weather.lightrain", defaults::LightRainSoundFile);
374  return val;
375 }
376 
377 const std::string& Properties::HardRainSoundFile() {
378  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
379  "core.weather.hardrain", defaults::HardRainSoundFile);
380  return val;
381 }
382 
383 const std::string& Properties::RainDropFile() {
384  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
385  "core.weather.raindrop", defaults::RainDropFile);
386  return val;
387 }
388 
389 const std::string& Properties::RainSplash1File() {
390  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
391  "core.weather.rainsplash1", defaults::RainSplash1File);
392  return val;
393 }
394 
395 const std::string& Properties::RainSplash2File() {
396  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
397  "core.weather.rainsplash2", defaults::RainSplash2File);
398  return val;
399 }
400 
401 const std::string& Properties::SnowFlakeFile() {
402  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
403  "core.weather.snowflake", defaults::SnowFlakeFile);
404  return val;
405 }
406 
407 const std::string& Properties::FogFile() {
408  static const std::string val =
409  bl::engine::Configuration::getOrDefault<std::string>("core.weather.fog", defaults::FogFile);
410  return val;
411 }
412 
413 const std::string& Properties::SandPatchFile() {
414  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
415  "core.weather.sandpatch", defaults::SandPatchFile);
416  return val;
417 }
418 
419 const std::string& Properties::SandSwirlFile() {
420  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
421  "core.weather.sandswirl", defaults::SandSwirlFile);
422  return val;
423 }
424 
426  return bl::engine::Configuration::getOrDefault<unsigned int>("core.weather.lightrain_particles",
427  defaults::LightRainDropCount);
428 }
429 
431  return bl::engine::Configuration::getOrDefault<unsigned int>("core.weather.hardrain_particles",
432  defaults::HardRainDropCount);
433 }
434 
436  return bl::engine::Configuration::getOrDefault<unsigned int>("core.weather.lightsnow_particles",
437  defaults::LightSnowFlakeCount);
438 }
439 
441  return bl::engine::Configuration::getOrDefault<unsigned int>("core.weather.hardsnow_particles",
442  defaults::HardSnowFlakeCount);
443 }
444 
446  return bl::engine::Configuration::getOrDefault<float>("core.weather.thunder.freq.min",
447  defaults::FrequentThunderMinInt);
448 }
449 
451  return bl::engine::Configuration::getOrDefault<float>("core.weather.thunder.freq.max",
452  defaults::FrequentThunderMaxInt);
453 }
454 
456  return bl::engine::Configuration::getOrDefault<float>("core.weather.thunder.infreq.min",
457  defaults::InfrequentThunderMinInt);
458 }
459 
461  return bl::engine::Configuration::getOrDefault<float>("core.weather.thunder.infreq.max",
462  defaults::InfrequentThunderMaxInt);
463 }
464 
466  return bl::engine::Configuration::getOrDefault<unsigned int>("core.weather.fog.thick_alpha",
467  defaults::ThickFogAlpha);
468 }
469 
470 unsigned int Properties::ThinFogAlpha() {
471  return bl::engine::Configuration::getOrDefault<unsigned int>("core.weather.fog.thin_alpha",
472  defaults::ThinFogAlpha);
473 }
474 
476  return bl::engine::Configuration::getOrDefault<int>("core.weather.lightrain.light",
477  defaults::LightRainLightModifier);
478 }
479 
481  return bl::engine::Configuration::getOrDefault<int>("core.weather.hardrain.light",
482  defaults::HardRainLightModifier);
483 }
484 
486  return bl::engine::Configuration::getOrDefault<int>("core.weather.lightsnow.light",
487  defaults::LightSnowLightModifier);
488 }
489 
491  return bl::engine::Configuration::getOrDefault<int>("core.weather.hardsnow.light",
492  defaults::HardSnowLightModifier);
493 }
494 
496  return bl::engine::Configuration::getOrDefault<int>("core.weather.thinfog.light",
497  defaults::ThinFogLightModifier);
498 }
499 
501  return bl::engine::Configuration::getOrDefault<int>("core.weather.thickfog.light",
502  defaults::ThickFogLightModifier);
503 }
504 
506  return bl::engine::Configuration::getOrDefault<int>("core.weather.sunny.light",
507  defaults::SunnyLightModifier);
508 }
509 
511  return bl::engine::Configuration::getOrDefault<int>("core.weather.sandstorm.light",
512  defaults::SandstormLightModifier);
513 }
514 
515 const std::string& Properties::NpcFileExtension() {
516  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
517  "core.npc.extension", defaults::NpcFileExtension);
518  return val;
519 }
520 
521 const std::string& Properties::NpcPath() {
522  static const std::string val =
523  bl::engine::Configuration::getOrDefault<std::string>("core.npc.path", defaults::NpcPath);
524  return val;
525 }
526 
527 const std::string& Properties::TrainerFileExtension() {
528  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
529  "core.trainer.extension", defaults::TrainerFileExtension);
530  return val;
531 }
532 
533 const std::string& Properties::TrainerPath() {
534  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
535  "core.trainer.path", defaults::TrainerPath);
536  return val;
537 }
538 
539 const std::string& Properties::ConversationPath() {
540  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
541  "core.conversation.path", defaults::ConversationPath);
542  return val;
543 }
544 
546  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
547  "core.conversation.extension", defaults::ConversationFileExtension);
548  return val;
549 }
550 
551 const std::string& Properties::LegacyPeoplemonPath() {
552  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
553  "core.trainer.pplpath", defaults::LegacyPeoplemonPath);
554  return val;
555 }
556 
558  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
559  "core.character.animpath", defaults::CharacterAnimationPath);
560  return val;
561 }
562 
564  return bl::engine::Configuration::getOrDefault<float>("core.character.speed",
565  defaults::CharacterMoveSpeed);
566 }
567 
569  return bl::engine::Configuration::getOrDefault<float>("core.character.fastspeed",
570  defaults::FastCharacterMoveSpeed);
571 }
572 
574  switch (g) {
575  case player::Gender::Boy:
576  return bl::engine::Configuration::get<std::string>("core.player.boy_anims");
578  return bl::engine::Configuration::get<std::string>("core.player.girl_anims");
579  default:
580  BL_LOG_ERROR << "Unknown player gender: " << static_cast<int>(g);
581  return defaults::BoyPlayerAnims;
582  }
583 }
584 
586  return bl::engine::Configuration::getOrDefault<float>("core.character.spin_period",
587  defaults::CharacterSpinPeriod);
588 }
589 
590 const std::string& Properties::ItemMetadataFile() {
591  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
592  "core.items.config", defaults::ItemMetadataFile);
593  return val;
594 }
595 
596 const std::string& Properties::ItemSprite() {
597  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
598  "core.items.sprite", defaults::ItemSprite);
599  return val;
600 }
601 
603  return bl::engine::Configuration::getOrDefault<float>("blib.interface.ghost_speed",
604  defaults::GhostWriterSpeed);
605 }
606 
607 const std::string& Properties::TextboxFile() {
608  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
609  "core.hud.textbox_file", defaults::TextboxFile);
610  return val;
611 }
612 
613 unsigned int Properties::HudFontSize() {
614  return bl::engine::Configuration::getOrDefault<unsigned int>("core.hud.font_size",
615  defaults::HudFontSize);
616 }
617 
618 const std::string& Properties::ScriptPath() {
619  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
620  "blib.script.path", defaults::ScriptPath);
621  return val;
622 }
623 
625  static const float v = bl::engine::Configuration::getOrDefault<float>(
626  "game.main.fadeout", defaults::ScreenFadePeriod);
627  return v;
628 }
629 
630 const std::string& Properties::PeoplemonDBFile() {
631  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
632  "core.pplmn.dbfile", defaults::PeoplemonDBFile);
633  return val;
634 }
635 
636 const std::string& Properties::MoveDBFile() {
637  static const std::string val = bl::engine::Configuration::getOrDefault<std::string>(
638  "core.moves.dbfile", defaults::MoveDBFile);
639  return val;
640 }
641 
642 sf::Color Properties::HPBarColor(unsigned int hp, unsigned int maxHp) {
643  const float percent = static_cast<float>(hp) / static_cast<float>(maxHp);
644  return HPBarColor(percent);
645 }
646 
647 sf::Color Properties::HPBarColor(float percent) {
648  if (percent > 0.5f) return sf::Color(28, 201, 74);
649  if (percent > 0.25f) return sf::Color(230, 222, 14);
650  return sf::Color(235, 33, 33);
651 }
652 
654  static const auto join = bl::util::FileUtil::joinPath;
655 
656  switch (ail) {
658  return join(ImagePath(), "Battle/annoy.png");
660  return join(ImagePath(), "Battle/frustrate.png");
662  return join(ImagePath(), "Battle/sticky.png");
664  return join(ImagePath(), "Battle/sleep.png");
666  return join(ImagePath(), "Battle/frozen.png");
667  default:
668  return {};
669  }
670 }
671 
672 const std::string& Properties::PeoplemonImageFolder() {
673  static const std::string f = bl::engine::Configuration::getOrDefault<std::string>(
674  "core.peoplemon.image_dir", defaults::PeoplemonImageFolder);
675  return f;
676 }
677 
679  static const unsigned int c = bl::engine::Configuration::getOrDefault<unsigned int>(
680  "core.wild.chance", defaults::WildPeoplemonChance);
681  return c;
682 }
683 
684 const std::string& Properties::TrainerExclaimImage() {
685  static const std::string f = bl::engine::Configuration::getOrDefault<std::string>(
686  "core.trainer.img", defaults::TrainerExclaimImage);
687  return f;
688 }
689 
690 const std::string& Properties::TrainerExclaimSound() {
691  static const std::string f = bl::engine::Configuration::getOrDefault<std::string>(
692  "core.trainer.sfx", defaults::TrainerExclaimSound);
693  return f;
694 }
695 
696 const std::string& Properties::SoundPath() {
697  static const std::string f = bl::engine::Configuration::getOrDefault<std::string>(
698  "core.audio.sound_path", defaults::SoundPath);
699  return f;
700 }
701 
702 bl::audio::AudioSystem::Handle Properties::MenuMoveSound() {
703  return bl::audio::AudioSystem::getOrLoadSound(
704  bl::util::FileUtil::joinPath(SoundPath(), "Menu/move.wav"));
705 }
706 
707 bl::audio::AudioSystem::Handle Properties::MenuMoveFailSound() {
708  return bl::audio::AudioSystem::getOrLoadSound(
709  bl::util::FileUtil::joinPath(SoundPath(), "Menu/moveFail.wav"));
710 }
711 
712 bl::audio::AudioSystem::Handle Properties::MenuBackSound() {
713  return bl::audio::AudioSystem::getOrLoadSound(
714  bl::util::FileUtil::joinPath(SoundPath(), "Menu/back.wav"));
715 }
716 
717 } // namespace core
Ailment
Represents an ailment that a Peoplemon can have.
Definition: Ailment.hpp:16
Gender
Possible genders for the player.
Definition: Gender.hpp:24
Core classes and functionality for both the editor and game.
static const std::string & MoveDBFile()
Definition: Properties.cpp:636
static int LightRainLightModifier()
Definition: Properties.cpp:475
static void save()
Saves the config to the data file.
Definition: Properties.cpp:242
static const std::string & AnimationPath()
Definition: Properties.cpp:327
static int SunnyLightModifier()
Definition: Properties.cpp:505
static int WindowWidth()
Definition: Properties.cpp:250
static const std::string & SandSwirlFile()
Definition: Properties.cpp:419
static const std::string & ItemSprite()
Definition: Properties.cpp:596
static const std::string & RainSplash2File()
Definition: Properties.cpp:395
static bool InEditor()
Definition: Properties.cpp:266
static bl::audio::AudioSystem::Handle MenuMoveFailSound()
Definition: Properties.cpp:707
static const sf::VulkanFont & MenuFont()
Definition: Properties.cpp:363
static const std::string & NpcFileExtension()
Definition: Properties.cpp:515
static const std::string & MapAnimationPath()
Definition: Properties.cpp:357
static const std::string & TrainerPath()
Definition: Properties.cpp:533
static int HardRainLightModifier()
Definition: Properties.cpp:480
static int HardSnowLightModifier()
Definition: Properties.cpp:490
static const std::string & LightRainSoundFile()
Definition: Properties.cpp:371
static int SandstormLightModifier()
Definition: Properties.cpp:510
static const std::string & ConversationPath()
Definition: Properties.cpp:539
static const std::string & ScriptPath()
Definition: Properties.cpp:618
static bl::audio::AudioSystem::Handle MenuBackSound()
Definition: Properties.cpp:712
static float InfrequentThunderMaxInterval()
Definition: Properties.cpp:460
static int ThickFogLightModifier()
Definition: Properties.cpp:500
static const std::string & HardRainSoundFile()
Definition: Properties.cpp:377
static const std::string & MapPath()
Definition: Properties.cpp:339
static int PixelsPerTile()
Definition: Properties.cpp:279
static const std::string & ConversationFileExtension()
Definition: Properties.cpp:545
static unsigned int HardRainParticleCount()
Definition: Properties.cpp:430
static float CharacterSpinPeriod()
Definition: Properties.cpp:585
static const std::string & PeoplemonDBFile()
Definition: Properties.cpp:630
static std::string AilmentTexture(pplmn::Ailment ailment)
Definition: Properties.cpp:653
static const std::string & MusicPath()
Definition: Properties.cpp:315
static const std::string & ThunderSoundFile()
Definition: Properties.cpp:365
static const std::string & MapTilePath()
Definition: Properties.cpp:351
static const std::string & PlayerAnimations(player::Gender gender)
Definition: Properties.cpp:573
static unsigned int ThinFogAlpha()
Definition: Properties.cpp:470
static unsigned int LightSnowParticleCount()
Definition: Properties.cpp:435
static unsigned int WildPeoplemonChance()
Definition: Properties.cpp:678
static const std::string & SandPatchFile()
Definition: Properties.cpp:413
static float CharacterMoveSpeed()
Definition: Properties.cpp:563
static const std::string & NpcPath()
Definition: Properties.cpp:521
static float FrequentThunderMinInterval()
Definition: Properties.cpp:445
static const std::string & SoundPath()
Definition: Properties.cpp:696
static const std::string & TilesetPath()
Definition: Properties.cpp:345
static bl::audio::AudioSystem::Handle MenuMoveSound()
Definition: Properties.cpp:702
static const std::string & TrainerExclaimSound()
Definition: Properties.cpp:690
static float FrequentThunderMaxInterval()
Definition: Properties.cpp:450
static const std::string & FogFile()
Definition: Properties.cpp:407
static const std::string & MenuImagePath()
Definition: Properties.cpp:303
static sf::Vector2f WindowSize()
Definition: Properties.cpp:262
static const std::string & SpritesheetPath()
Definition: Properties.cpp:309
static const std::string & RainSplash1File()
Definition: Properties.cpp:389
static const std::string & CharacterAnimationPath()
Definition: Properties.cpp:557
static float InfrequentThunderMinInterval()
Definition: Properties.cpp:455
static const std::string & TextboxFile()
Definition: Properties.cpp:607
static int LightingWidthTiles()
Definition: Properties.cpp:291
static sf::Color HPBarColor(float percent)
Definition: Properties.cpp:647
static float FastCharacterMoveSpeed()
Definition: Properties.cpp:568
static int LightingHeightTiles()
Definition: Properties.cpp:297
static const std::string & TrainerFileExtension()
Definition: Properties.cpp:527
static int WindowHeight()
Definition: Properties.cpp:256
static int ExtraRenderTiles()
Definition: Properties.cpp:285
static const std::string & RainDropFile()
Definition: Properties.cpp:383
static float GhostWriterSpeed()
Definition: Properties.cpp:602
static const std::string & PlaylistPath()
Definition: Properties.cpp:321
static const std::string & ImagePath()
Definition: Properties.cpp:333
static unsigned int LightRainParticleCount()
Definition: Properties.cpp:425
static const std::string & SaveExtension()
Definition: Properties.cpp:274
static const std::string & ItemMetadataFile()
Definition: Properties.cpp:590
static unsigned int ThickFogAlpha()
Definition: Properties.cpp:465
static const std::string & SnowFlakeFile()
Definition: Properties.cpp:401
static bool load(bool inEditor)
Loads from the config file and sets defaults. Must be called before using any properties.
Definition: Properties.cpp:119
static const std::string & PeoplemonImageFolder()
Definition: Properties.cpp:672
static const std::string & LegacyPeoplemonPath()
Definition: Properties.cpp:551
static int ThinFogLightModifier()
Definition: Properties.cpp:495
static float ScreenFadePeriod()
Definition: Properties.cpp:624
static unsigned int HudFontSize()
Definition: Properties.cpp:613
static unsigned int HardSnowParticleCount()
Definition: Properties.cpp:440
static const std::string & SaveDirectory()
Definition: Properties.cpp:268
static const std::string & WindowIconFile()
Definition: Properties.cpp:244
static int LightSnowLightModifier()
Definition: Properties.cpp:485
static const std::string & TrainerExclaimImage()
Definition: Properties.cpp:684