| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | /* * VCMI_Lib.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */#include "StdInc.h"#include "VCMI_Lib.h"#include "CArtHandler.h"#include "CBonusTypeHandler.h"#include "CCreatureHandler.h"#include "mapObjects/CObjectClassesHandler.h"#include "CHeroHandler.h"#include "mapObjects/CObjectHandler.h"#include "CTownHandler.h"#include "CBuildingHandler.h"#include "spells/CSpellHandler.h"#include "CSkillHandler.h"#include "CGeneralTextHandler.h"#include "CModHandler.h"#include "IGameEventsReceiver.h"#include "CStopWatch.h"#include "VCMIDirs.h"#include "filesystem/Filesystem.h"#include "CConsoleHandler.h"#include "rmg/CRmgTemplateStorage.h"#include "mapping/CMapEditManager.h"LibClasses * VLC = nullptr;DLL_LINKAGE void preinitDLL(CConsoleHandler * Console, bool onlyEssential){	console = Console;	VLC = new LibClasses();	try	{		VLC->loadFilesystem(onlyEssential);	}	catch(...)	{		handleException();		throw;	}}DLL_LINKAGE void loadDLLClasses(bool onlyEssential){	VLC->init(onlyEssential);}const IBonusTypeHandler * LibClasses::getBth() const{	return bth;}void LibClasses::loadFilesystem(bool onlyEssential){	CStopWatch totalTime;	CStopWatch loadTime;	CResourceHandler::initialize();	logGlobal->info("\tInitialization: %d ms", loadTime.getDiff());	CResourceHandler::load("config/filesystem.json");	logGlobal->info("\tData loading: %d ms", loadTime.getDiff());	modh = new CModHandler();	logGlobal->info("\tMod handler: %d ms", loadTime.getDiff());	modh->loadMods(onlyEssential);	modh->loadModFilesystems();	logGlobal->info("\tMod filesystems: %d ms", loadTime.getDiff());	logGlobal->info("Basic initialization: %d ms", totalTime.getDiff());}static void logHandlerLoaded(const std::string & name, CStopWatch & timer){   logGlobal->info("\t\t %s handler: %d ms", name, timer.getDiff());}template <class Handler> void createHandler(Handler *&handler, const std::string &name, CStopWatch &timer){	handler = new Handler();	logHandlerLoaded(name, timer);}void LibClasses::init(bool onlyEssential){	CStopWatch pomtime, totalTime;	modh->initializeConfig();	createHandler(bth, "Bonus type", pomtime);	createHandler(generaltexth, "General text", pomtime);	createHandler(heroh, "Hero", pomtime);	createHandler(arth, "Artifact", pomtime);	createHandler(creh, "Creature", pomtime);	createHandler(townh, "Town", pomtime);	createHandler(objh, "Object", pomtime);	createHandler(objtypeh, "Object types information", pomtime);	createHandler(spellh, "Spell", pomtime);	createHandler(skillh, "Skill", pomtime);	createHandler(terviewh, "Terrain view pattern", pomtime);	createHandler(tplh, "Template", pomtime); //templates need already resolved identifiers (refactor?)	logGlobal->info("\tInitializing handlers: %d ms", totalTime.getDiff());	modh->load();	modh->afterLoad(onlyEssential);	//FIXME: make sure that everything is ok after game restart	//TODO: This should be done every time mod config changes}void LibClasses::clear(){	delete generaltexth;	delete heroh;	delete arth;	delete creh;	delete townh;	delete objh;	delete objtypeh;	delete spellh;	delete skillh;	delete modh;	delete bth;	delete tplh;	delete terviewh;	makeNull();}void LibClasses::makeNull(){	generaltexth = nullptr;	heroh = nullptr;	arth = nullptr;	creh = nullptr;	townh = nullptr;	objh = nullptr;	objtypeh = nullptr;	spellh = nullptr;	skillh = nullptr;	modh = nullptr;	bth = nullptr;	tplh = nullptr;	terviewh = nullptr;}LibClasses::LibClasses(){	IS_AI_ENABLED = false;	//init pointers to handlers	makeNull();}void LibClasses::callWhenDeserializing(){	//FIXME: check if any of these are needed	//generaltexth = new CGeneralTextHandler();	//generaltexth->load();	//arth->load(true);	//modh->recreateHandlers();	//modh->loadConfigFromFile ("defaultMods"); //TODO: remember last saved config}LibClasses::~LibClasses(){	clear();}
 |