VCMI_Lib.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #include "StdInc.h"
  2. #include "VCMI_Lib.h"
  3. #include "CArtHandler.h"
  4. #include "CCreatureHandler.h"
  5. #include "CDefObjInfoHandler.h"
  6. #include "CHeroHandler.h"
  7. #include "CObjectHandler.h"
  8. #include "CTownHandler.h"
  9. #include "CBuildingHandler.h"
  10. #include "CSpellHandler.h"
  11. #include "CGeneralTextHandler.h"
  12. #include "CModHandler.h"
  13. #include "IGameEventsReceiver.h"
  14. #include "CStopWatch.h"
  15. #include "VCMIDirs.h"
  16. #include "Filesystem/CResourceLoader.h"
  17. /*
  18. * VCMI_Lib.cpp, part of VCMI engine
  19. *
  20. * Authors: listed in file AUTHORS in main folder
  21. *
  22. * License: GNU General Public License v2.0 or later
  23. * Full text of license available in license.txt file, in main folder
  24. *
  25. */
  26. LibClasses * VLC = NULL;
  27. DLL_LINKAGE void preinitDLL(CConsoleHandler *Console, std::ostream *Logfile)
  28. {
  29. console = Console;
  30. logfile = Logfile;
  31. VLC = new LibClasses;
  32. try
  33. {
  34. VLC->loadFilesystem();
  35. }
  36. HANDLE_EXCEPTION;
  37. }
  38. DLL_LINKAGE void loadDLLClasses()
  39. {
  40. try
  41. {
  42. VLC->init();
  43. }
  44. HANDLE_EXCEPTION;
  45. }
  46. void LibClasses::loadFilesystem()
  47. {
  48. CStopWatch totalTime;
  49. CStopWatch loadTime;
  50. CResourceHandler::initialize();
  51. tlog0<<"\t Initialization: "<<loadTime.getDiff()<<std::endl;
  52. CResourceHandler::loadFileSystem("", "ALL/config/filesystem.json");
  53. tlog0<<"\t Data loading: "<<loadTime.getDiff()<<std::endl;
  54. modh = new CModHandler;
  55. tlog0<<"\tMod handler: "<<loadTime.getDiff()<<std::endl;
  56. modh->initialize(CResourceHandler::getAvailableMods());
  57. CResourceHandler::setActiveMods(modh->getActiveMods());
  58. tlog0<<"\t Mod filesystems: "<<loadTime.getDiff()<<std::endl;
  59. tlog0<<"Basic initialization: "<<totalTime.getDiff()<<std::endl;
  60. }
  61. void LibClasses::init()
  62. {
  63. CStopWatch pomtime;
  64. generaltexth = new CGeneralTextHandler;
  65. generaltexth->load();
  66. tlog0<<"\tGeneral text handler: "<<pomtime.getDiff()<<std::endl;
  67. heroh = new CHeroHandler;
  68. heroh->load();
  69. tlog0 <<"\tHero handler: "<<pomtime.getDiff()<<std::endl;
  70. arth = new CArtHandler;
  71. arth->loadArtifacts(false);
  72. tlog0<<"\tArtifact handler: "<<pomtime.getDiff()<<std::endl;
  73. creh = new CCreatureHandler();
  74. creh->loadCreatures();
  75. tlog0<<"\tCreature handler: "<<pomtime.getDiff()<<std::endl;
  76. townh = new CTownHandler;
  77. townh->load();
  78. tlog0<<"\tTown handler: "<<pomtime.getDiff()<<std::endl;
  79. objh = new CObjectHandler;
  80. objh->loadObjects();
  81. tlog0<<"\tObject handler: "<<pomtime.getDiff()<<std::endl;
  82. dobjinfo = new CDefObjInfoHandler;
  83. dobjinfo->load();
  84. tlog0<<"\tDef information handler: "<<pomtime.getDiff()<<std::endl;
  85. spellh = new CSpellHandler;
  86. spellh->loadSpells();
  87. tlog0<<"\tSpell handler: "<<pomtime.getDiff()<<std::endl;
  88. modh->loadActiveMods();
  89. modh->reload();
  90. //FIXME: make sure that everything is ok after game restart
  91. //TODO: This should be done every time mod config changes
  92. IS_AI_ENABLED = false;
  93. }
  94. void LibClasses::clear()
  95. {
  96. delete generaltexth;
  97. delete heroh;
  98. delete arth;
  99. delete creh;
  100. delete townh;
  101. delete objh;
  102. delete dobjinfo;
  103. delete spellh;
  104. delete modh;
  105. makeNull();
  106. }
  107. void LibClasses::makeNull()
  108. {
  109. generaltexth = NULL;
  110. heroh = NULL;
  111. arth = NULL;
  112. creh = NULL;
  113. townh = NULL;
  114. objh = NULL;
  115. dobjinfo = NULL;
  116. spellh = NULL;
  117. modh = NULL;
  118. }
  119. LibClasses::LibClasses()
  120. {
  121. //init pointers to handlers
  122. makeNull();
  123. }
  124. void LibClasses::callWhenDeserializing()
  125. {
  126. generaltexth = new CGeneralTextHandler;
  127. generaltexth->load();
  128. arth->loadArtifacts(true);
  129. //modh->recreateHandlers();
  130. //modh->loadConfigFromFile ("defaultMods"); //TODO: remember last saved config
  131. }
  132. LibClasses::~LibClasses()
  133. {
  134. clear();
  135. }