CModHandler.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. }
  52. void CModHandler::saveConfigToFile (std::string name)
  53. {
  54. //JsonNode savedConf = config;
  55. //JsonNode schema(ResourceID("config/defaultSettings.json"));
  56. //savedConf.Struct().erase("session");
  57. //savedConf.minimize(schema);
  58. CResourceHandler::get()->createResource("config/" + name +".json");
  59. std::ofstream file(CResourceHandler::get()->getResourceName(ResourceID("config/" + name +".json")), std::ofstream::trunc);
  60. //file << savedConf;
  61. }
  62. void CModHandler::recreateHandlers()
  63. {
  64. //TODO: consider some template magic to unify all handlers?
  65. VLC->arth->artifacts.clear();
  66. VLC->creh->creatures.clear(); //TODO: what about items from original game?
  67. BOOST_FOREACH (auto mod, activeMods)
  68. {
  69. BOOST_FOREACH (auto art, allMods[mod].artifacts)
  70. {
  71. VLC->arth->artifacts.push_back (artifacts[art]);
  72. }
  73. BOOST_FOREACH (auto creature, allMods[mod].creatures)
  74. {
  75. VLC->creh->creatures.push_back (creatures[creature]);
  76. }
  77. }
  78. }
  79. CModHandler::~CModHandler()
  80. {
  81. }