Subversion Repositories spk

Rev

Rev 84 | Rev 114 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#pragma once

#include "CyString.h"
#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      *_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);

        void SetAddon(const Utils::String &addon) { m_sAddon = addon; }

        void 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);
        bool 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);
        bool isFileAvailable(const Utils::String &file);

        CyStringList *GetTShipsEntries();
        Utils::String getTShipsEntry(const Utils::String &sId);

        void updateModTexts(int iPage);
        void updateModTexts(int iFromPage, int iToPage);
        void updateTexts(int iPage);
        void updateTexts(int iFromPage, int iToPage);

        Utils::String findText(int iLang, int iPage, int iID) const;
        bool textExists(int iLang, int iPage, int iID) const;

        void clearMods(bool bIncludeStandard = false);
        bool loadShipData(CyStringList *list);
        void setLanguage(int iLang);

        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();

private:
        void _updateTexts(int iFromPage, int iToPage, FileList *pFileList, CTextDB *pTextList);
        Utils::String _convertExtension(const Utils::String &sFile);
        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);
        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();

        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);
};

}