Rev 114 | Rev 274 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#pragma once#include "File.h"#include "Utils/StringList.h"#include <map>class CBaseFile;class CXspFile;namespace Utils {class CStringList;}namespace SPK {class CTextDB;tclass CVirtualFileSystem{public:typedef std::map<Utils::String, Utils::String> FileList;typedef std::map<Utils::String, Utils::String>::iterator FileListItr;private:Utils::String m_sAddon;Utils::String m_sDir;bool m_bLoaded;FileList *m_pModMap;FileList *m_pMap;CTextDB *m_pTexts;CTextDB *m_pModTexts;Utils::CStringList *_lShips;Utils::CStringList *_lShields;Utils::CStringList *_lLasers;Utils::CStringList *_lMissiles;Utils::CStringList *_lCockpits;Utils::CStringList *_lComponentSections;Utils::CStringList *_lDummySections;Utils::CStringList *_lBodiesSections;int m_iLang;public:CVirtualFileSystem(void);~CVirtualFileSystem(void);// settersvoid setAddon(const Utils::String &addon);void setLanguage(int iLang);// extractionsvoid extractTexts(CXspFile *pPackage, int textId);C_File *extractGameFileToPackage(CBaseFile *pPackage, const Utils::String &sFile, FileType iFileType, const Utils::String &sTo);C_File *extractGameFileToPackage(CBaseFile *pPackage, const Utils::String &sFile, FileType iFileType);Utils::String ExtractGameFile(const Utils::String &file, const Utils::String &to);// loadingbool LoadFilesystem(const Utils::String &dir, int maxPatch = 0);bool LoadFilesystem(const Utils::String &dir, const Utils::String &mod, int maxPatch = 0);bool loadMod(const Utils::String &mod);bool addMod(const Utils::String &mod);// gettersconst Utils::String &directory() const;bool isFileAvailable(const Utils::String &file) const;Utils::String getTShipsEntry(const Utils::String &sId);Utils::String findText(int iLang, int iPage, int iID) const;bool textExists(int iLang, int iPage, int iID) const;bool isTextUpdated() const;// Updatesvoid updateModTexts(int iPage);void updateModTexts(int iFromPage, int iToPage);void updateTexts(int iPage);void updateTexts(int iFromPage, int iToPage);void clearMods(bool bIncludeStandard = false);// IteratorsUtils::CStringList *getTShipsEntries();Utils::String firstShield();Utils::String nextShield();Utils::String firstComponentSection();Utils::String nextComponentSection();Utils::String firstDummySection();Utils::String nextDummySection();Utils::String firstBodiesSection();Utils::String nextBodiesSection();std::pair<Utils::String, Utils::String> firstLaser();std::pair<Utils::String, Utils::String> nextLaser();std::pair<Utils::String, Utils::String> firstMissile();std::pair<Utils::String, Utils::String> nextMissile();Utils::String firstCockpit();Utils::String nextCockpit();///////////////////////////////////////////////////////////////// Debug Functionsvoid DEBUG_LogContents(const Utils::String &sFile);private:void _updateTexts(int iFromPage, int iToPage, FileList *pFileList, CTextDB *pTextList);Utils::String _convertExtension(const Utils::String &sFile) const;void _clear();void _addFile(const Utils::String &sFile, const Utils::String &sDest, FileList *pList);void _addModFile(const Utils::String &sFile, const Utils::String &sMod, FileList *pList);Utils::String _findFile(const Utils::String &file) const;void _addDir(const Utils::String &sStart, const Utils::String &sDir);Utils::String _extractFromCat(const Utils::String &sCat, const Utils::String &sFile, const Utils::String &sTo);Utils::String _extract(const Utils::String &sFile, const Utils::String &sTo);Utils::CStringList *_updateList(const Utils::String &typesFile, int iTextPos);void _updateShields();void _updateLasers();void _updateMissiles();void _updateCockpits();void _updateComponentSections();void _updateDummySections();void _updateBodiesSections();void _updateShips();Utils::String _returnText(Utils::SStringList *s);Utils::String _returnID(Utils::SStringList *s);Utils::String _returnLine(Utils::SStringList *s);std::pair<Utils::String, Utils::String> _returnPair(Utils::SStringList *s);Utils::CStringList *_updateSectionList(const Utils::String &sFile, bool singleEntry);void _removeSameFile(const Utils::String &sFile, const Utils::String &sDest, const Utils::String &ext, FileList *pList);};}