/** ****************************************************************************** @file /common/rm/rmadvxml.h @brief RM pristupujici k jednotkam,budovam apod. objektum @author Vta @version 1.0 ******************************************************************************/ #ifndef _RMadvxml_ #define _RMadvxml_ #include "common/rm/rm.h" #include "common/rm/rmconfi.h" #include "world/typedefs.h" namespace rm { #define RM_UNIT 0 ///< Oznaceni RM_advxml pro jednotky #define RM_BUILDING 1 ///< Oznaceni RM_advxml pro budovy #define RM_BONUS 3 ///< Oznaceni RM_advxml pro bonusy // ! ! v cele aplikaci musi existovat prave jedna instance tridy TRM_advxml ! ! /// Trida RM pro jednotky, budovy a kouzla class TRM_advxml:public TRM { public: /** @name Nacitani/uvolnovani/ziskani dat */ //@{ /** Pozadavek na nacteni dat s indexem id */ void loadData(int id); /** Pozadavek na nacteni dat s indexem id i se vsemi dalsimi zdroji, ktere dane data vyuzivaji */ void requestDep(int id); /** Ziska (kdyztak nacte) data s indexem id, nekopiruje data */ void get(void ** data_i,int id); /** Odstrani nactene data z pameti */ void freeData(int id); /** Vraci pocet vsech objektu daneho typu */ int getCount(); /** Vraci pocet pouzitych(nactenych) objektu */ int getLoaded(); /** Vraci indexy, kde ids[i]==1 pokud tam objekt existuje, jinak 0 */ void getIds(DA * ids); /** Do all priradi this->data. Jedna se o data readonly. */ void getAll(DA ** all); //@} /** @name Modifikace dat */ //@{ /** Prida objekt na prvni volnou pozici od startid, pokud id==-1 jinak na danou. Data se kopiruji, predpoklada, ze retezec v RMtxt jiz existuje, to same pro model. @param data_i vlastni data k ulozeni @param startiddata_i od ktereho indexu se ma hledat index volny, pokud je roven -1 @param file jmeno souboru kde budou data ulozena @return index na ktery se dane data pridaly */ int add(void * data_i,int startiddata_i,char * file); /** Prida objekt na prvni volnou pozici od startid, pokud id==-1 jinak na danou. Data se kopiruji, prida i retezec do RMtxt (na prvni volne misto od startidstring). Model nelze touto cestou pridat (je nutne volat primo pres RMmodeli) @param data_i vlastni data k ulozeni @param startid od ktereho indexu se ma hledat index volny, pokud je roven -1 @param file jmeno souboru kde budou data ulozena @param name retezec se jmenem jednotky,budovy nebo kouzla @param startidstring udava pocatecni pozici odkud hledat volny index na retezec, pokud je roven -1 @return index na ktery se dane data pridaly */ int addDep(void * data_i,int startid, char * file,char * name,int startidstring); /** Modifikuje jiz zapsane data */ void modify(void * data_i); /** Smaze data s indexem id ze seznamu - z indexoveho souboru */ void del(int id); /** Smaze data s indexem id ze seznamu a zaroven odstrani retezec z RMtxt */ void delDep(int id); //@} /** Konstruktor s interafacem pro konfiguracni soubory */ TRM_advxml(TRM_conf_i * rmc,int type); /** Destruktor */ ~TRM_advxml(); private: /** Vraci nejvetsi pouzity index */ int getMaxId(); /** Ziska celou cestu k souboru daneho objektu s danym id */ void getFileOf(int id,char * path,int pathsize); /** Prevod struktury jednotky do XML */ void unitToXML(TXMLdata * xml,World::UNIT * unit); /** Prevod xml souboru do struktury jednotky */ void XMLtoUnit(World::UNIT * unit,TXMLdata * xml); /** Prevod struktury budovy do XML */ void buildingToXML(TXMLdata * xml,World::BUILDING * building); /** Prevod xml souboru do struktury budovy */ void XMLtoBuilding(World::BUILDING * building,TXMLdata * xml); /** Prevod struktury bonusu do XML */ void bonusToXML(TXMLdata * xml,World::UNIT_PROPERTY_BONUS * bonus); /** Prevod xml souboru do struktury bonusu */ void XMLtoBonus(World::UNIT_PROPERTY_BONUS * bonus,TXMLdata * xml); /** Interface pro konfiguracni soubory */ TRM_conf_i * rmconfi; /** Pole s nactenymi daty */ DA * data; /** Typ RM - jednotky (hodnota RM_UNIT), budovy (hodnota RM_BUILDING),kouzla (hodnota RM_SPELL) */ int type; }; } // namespace #endif // define _RMadvxml_ /*****************************************************************************/