2012-08-10 18:16:42 +03:00
# pragma once
# include "Filesystem/CResourceLoader.h"
2012-08-10 16:07:53 +03:00
# include "VCMI_Lib.h"
# include "CCreatureHandler.h"
# include "CArtHandler.h"
/*
* CModHandler . h , 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
*
*/
class CModHandler ;
class CModIndentifier ;
class CModInfo ;
typedef si32 artID ;
typedef si32 creID ;
class DLL_LINKAGE CModIdentifier
{
//TODO? are simple integer identifiers enough?
int id ;
public :
// int operator ()() {return 0;};
bool operator < ( CModIdentifier rhs ) const { return true ; } ; //for map
template < typename Handler > void serialize ( Handler & h , const int version )
{
h & id ;
}
} ;
class DLL_LINKAGE CModInfo
{
public :
std : : vector < CModIdentifier > requirements ;
std : : vector < ResourceID > usedFiles ;
//TODO: config options?
//items added by this mod
std : : vector < artID > artifacts ;
std : : vector < creID > creatures ;
//TODO: some additional scripts?
template < typename Handler > void serialize ( Handler & h , const int version )
{
h & requirements & artifacts & creatures ;
//h & usedFiles; //TODO: make seralizable?
}
} ;
class DLL_LINKAGE CModHandler
{
public :
std : : string currentConfig ; //save settings in this file
//list of all possible objects in game, including inactive mods or not allowed
std : : vector < ConstTransitivePtr < CCreature > > creatures ;
std : : vector < ConstTransitivePtr < CArtifact > > artifacts ;
std : : map < CModIdentifier , CModInfo > allMods ;
std : : set < CModIdentifier > activeMods ;
//create unique object indentifier
artID addNewArtifact ( CArtifact * art ) ;
creID addNewCreature ( CCreature * cre ) ;
void loadConfigFromFile ( std : : string name ) ;
void saveConfigToFile ( std : : string name ) ;
2012-08-30 17:57:24 +03:00
CCreature * loadCreature ( const JsonNode & node ) ; //TODO: handler collections now use ModHandler vector index. Should they be aligned according to mods actually used??
2012-08-10 16:07:53 +03:00
void recreateHandlers ( ) ;
2012-08-11 12:06:23 +03:00
struct DLL_LINKAGE hardcodedFeatures
{
int CREEP_SIZE ; // neutral stacks won't grow beyond this number
int WEEKLY_GROWTH ; //percent
int NEUTRAL_STACK_EXP ;
bool DWELLINGS_ACCUMULATE_CREATURES ;
bool ALL_CREATURES_GET_DOUBLE_MONTHS ;
template < typename Handler > void serialize ( Handler & h , const int version )
{
h & CREEP_SIZE & WEEKLY_GROWTH & NEUTRAL_STACK_EXP ;
h & DWELLINGS_ACCUMULATE_CREATURES & ALL_CREATURES_GET_DOUBLE_MONTHS ;
}
} settings ;
2012-08-24 12:37:52 +03:00
struct DLL_LINKAGE gameModules
{
bool STACK_EXP ;
bool STACK_ARTIFACT ;
bool COMMANDERS ;
bool MITHRIL ;
template < typename Handler > void serialize ( Handler & h , const int version )
{
h & STACK_EXP & STACK_ARTIFACT & COMMANDERS & MITHRIL ;
}
} modules ;
2012-08-10 16:07:53 +03:00
CModHandler ( ) ;
~ CModHandler ( ) ;
template < typename Handler > void serialize ( Handler & h , const int version )
{
2012-08-24 12:37:52 +03:00
h & currentConfig ;
2012-08-10 16:07:53 +03:00
h & creatures & artifacts ;
2012-08-24 12:37:52 +03:00
h & allMods & activeMods & settings & modules ;
2012-08-10 16:07:53 +03:00
}
2012-08-10 18:16:42 +03:00
} ;