Settings.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Settings.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include <limits>
  12. #include "Settings.h"
  13. #include "../../../lib/mapObjectConstructors/AObjectTypeHandler.h"
  14. #include "../../../lib/mapObjectConstructors/CObjectClassesHandler.h"
  15. #include "../../../lib/mapObjectConstructors/CBankInstanceConstructor.h"
  16. #include "../../../lib/mapObjects/MapObjects.h"
  17. #include "../../../lib/modding/CModHandler.h"
  18. #include "../../../lib/VCMI_Lib.h"
  19. #include "../../../lib/filesystem/Filesystem.h"
  20. #include "../../../lib/json/JsonNode.h"
  21. namespace NKAI
  22. {
  23. Settings::Settings()
  24. : maxRoamingHeroes(8),
  25. mainHeroTurnDistanceLimit(10),
  26. scoutHeroTurnDistanceLimit(5),
  27. maxGoldPressure(0.3f),
  28. maxpass(10),
  29. allowObjectGraph(false)
  30. {
  31. ResourcePath resource("config/ai/nkai/nkai-settings", EResType::JSON);
  32. loadFromMod("core", resource);
  33. for(const auto & modName : VLC->modh->getActiveMods())
  34. {
  35. if(CResourceHandler::get(modName)->existsResource(resource))
  36. loadFromMod(modName, resource);
  37. }
  38. }
  39. void Settings::loadFromMod(const std::string & modName, const ResourcePath & resource)
  40. {
  41. if(!CResourceHandler::get(modName)->existsResource(resource))
  42. {
  43. logGlobal->error("Failed to load font %s from mod %s", resource.getName(), modName);
  44. return;
  45. }
  46. JsonNode node(JsonPath::fromResource(resource), modName);
  47. if(node.Struct()["maxRoamingHeroes"].isNumber())
  48. {
  49. maxRoamingHeroes = node.Struct()["maxRoamingHeroes"].Integer();
  50. }
  51. if(node.Struct()["mainHeroTurnDistanceLimit"].isNumber())
  52. {
  53. mainHeroTurnDistanceLimit = node.Struct()["mainHeroTurnDistanceLimit"].Integer();
  54. }
  55. if(node.Struct()["scoutHeroTurnDistanceLimit"].isNumber())
  56. {
  57. scoutHeroTurnDistanceLimit = node.Struct()["scoutHeroTurnDistanceLimit"].Integer();
  58. }
  59. if(node.Struct()["maxpass"].isNumber())
  60. {
  61. maxpass = node.Struct()["maxpass"].Integer();
  62. }
  63. if(node.Struct()["maxGoldPressure"].isNumber())
  64. {
  65. maxGoldPressure = node.Struct()["maxGoldPressure"].Float();
  66. }
  67. if(!node.Struct()["allowObjectGraph"].isNull())
  68. {
  69. allowObjectGraph = node.Struct()["allowObjectGraph"].Bool();
  70. }
  71. }
  72. }