2
0

CModHandler.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "StdInc.h"
  2. #include "CModHandler.h"
  3. #include "JsonNode.h"
  4. /*
  5. * CModHandler.h, part of VCMI engine
  6. *
  7. * Authors: listed in file AUTHORS in main folder
  8. *
  9. * License: GNU General Public License v2.0 or later
  10. * Full text of license available in license.txt file, in main folder
  11. *
  12. */
  13. class CArtHandler;
  14. class CHeroHandler;
  15. class CCreatureHandler;
  16. class CSpellHandler;
  17. class CBuildingHandler;
  18. class CObjectHandler;
  19. class CDefObjInfoHandler;
  20. class CTownHandler;
  21. class CGeneralTextHandler;
  22. CModHandler::CModHandler()
  23. {
  24. VLC->modh = this;
  25. loadConfigFromFile ("defaultMods");
  26. //CResourceHandler::loadModsFilesystems(); //scan for all mods
  27. //TODO: mod filesystem is already initialized at LibClasses launch
  28. //TODO: load default (last?) config
  29. }
  30. artID CModHandler::addNewArtifact (CArtifact * art)
  31. {
  32. int id = artifacts.size();
  33. artifacts.push_back (art);
  34. return id;
  35. }
  36. creID CModHandler::addNewCreature (CCreature * cre)
  37. {
  38. int id = creatures.size();
  39. creatures.push_back (cre);
  40. return id;
  41. }
  42. void CModHandler::loadConfigFromFile (std::string name)
  43. {
  44. const JsonNode config(ResourceID("config/" + name + ".json"));
  45. auto hardcodedFeatures = config["hardcodedFeatures"];
  46. settings.CREEP_SIZE = hardcodedFeatures["CREEP_SIZE"].Float();
  47. settings.WEEKLY_GROWTH = hardcodedFeatures["WEEKLY_GROWTH_PERCENT"].Float();
  48. settings.NEUTRAL_STACK_EXP = hardcodedFeatures["NEUTRAL_STACK_EXP_DAILY"].Float();
  49. settings.DWELLINGS_ACCUMULATE_CREATURES = hardcodedFeatures["DWELLINGS_ACCUMULATE_CREATURES"].Bool();
  50. settings.ALL_CREATURES_GET_DOUBLE_MONTHS = hardcodedFeatures["ALL_CREATURES_GET_DOUBLE_MONTHS"].Bool();
  51. auto gameModules = config["modules"];
  52. modules.STACK_EXP = gameModules["STACK_EXPERIENCE"].Bool();
  53. modules.STACK_ARTIFACT = gameModules["STACK_ARTIFACTS"].Bool();
  54. modules.COMMANDERS = gameModules["COMMANDERS"].Bool();
  55. modules.MITHRIL = gameModules["MITHRIL"].Bool();
  56. }
  57. void CModHandler::saveConfigToFile (std::string name)
  58. {
  59. //JsonNode savedConf = config;
  60. //JsonNode schema(ResourceID("config/defaultSettings.json"));
  61. //savedConf.Struct().erase("session");
  62. //savedConf.minimize(schema);
  63. CResourceHandler::get()->createResource("config/" + name +".json");
  64. std::ofstream file(CResourceHandler::get()->getResourceName(ResourceID("config/" + name +".json")), std::ofstream::trunc);
  65. //file << savedConf;
  66. }
  67. void CModHandler::recreateHandlers()
  68. {
  69. //TODO: consider some template magic to unify all handlers?
  70. VLC->arth->artifacts.clear();
  71. VLC->creh->creatures.clear(); //TODO: what about items from original game?
  72. BOOST_FOREACH (auto mod, activeMods)
  73. {
  74. BOOST_FOREACH (auto art, allMods[mod].artifacts)
  75. {
  76. VLC->arth->artifacts.push_back (artifacts[art]);
  77. //TODO: recreate types / limiters based on string id
  78. }
  79. BOOST_FOREACH (auto creature, allMods[mod].creatures)
  80. {
  81. VLC->creh->creatures.push_back (creatures[creature]);
  82. //TODO: recreate upgrades and other properties based on string id
  83. }
  84. }
  85. }
  86. CModHandler::~CModHandler()
  87. {
  88. }