#ifndef ASSETS_H #define ASSETS_H #include "animparts.h" #include "model.h" #include "material.h" #include "materialpixelshader.h" #include "materialtechset.h" #include "gfximage.h" #include "soundalias.h" #include "soundcurve.h" #include "loadedsound.h" #include "clipmap.h" #include "comworld.h" #include "gameworld.h" #include "mapent.h" #include "gfxworld.h" #include "gfxlightdef.h" #include "gfximage.h" #include "font.h" #include "menulist.h" #include "menudef.h" #include "localizeentry.h" #include "weapondef.h" #include "sounddriver.h" #include "effectdef.h" #include "effecttable.h" #include "rawfile.h" #include "stringtable.h" #include #include struct AssetMap { QVector> animations; QVector> models; QVector> materials; QVector> pixelShaders; QVector> techSets; QVector> gfxWorlds; QVector> gfxLightDefs; QVector> images; QVector> sounds; QVector> soundCurves; QVector> loadedSounds; QVector> clipMaps; QVector> comWorlds; QVector> gameWorldSPs; QVector> gameWorldMPs; QVector> mapEntities; QVector> fonts; QVector> menuLists; QVector> menuDefinitions; QVector> localizeEntries; QVector> weaponDefinitions; QVector> soundDrivers; QVector> effectDefinitions; QVector> impactTables; QVector> rawFiles; QVector> stringTables; }; class Assets : public QObject { Q_OBJECT public: AssetMap assetMap; Assets(); ~Assets(); Assets(const Assets &Assets); Assets &operator=(const Assets &other); virtual std::shared_ptr Load_Animation(QDataStream *aZoneFileStream) { Animation result = {}; // Load_XAnimPartsPtr() qint32 animationptr; *aZoneFileStream >> animationptr; if (animationptr) { if (animationptr != -1 && animationptr != -2) { return nullptr; } // Load_XAnimParts() XAnimParts animParts; *aZoneFileStream >> animParts; } return std::make_shared(result); } virtual QString Load_XString(QDataStream *aZoneFileStream) { QString currentStr; qint32 stringPtr; *aZoneFileStream >> stringPtr; if (stringPtr) { if (stringPtr == -1) { currentStr = Load_XStringCustom(aZoneFileStream); } else { // Resolve from g_streamBlocks } } return currentStr; } virtual QString Load_XStringCustom(QDataStream *aZoneFileStream) { QString currentStr; char currentChar; *aZoneFileStream >> currentChar; while (currentChar != 0) { currentStr += currentChar; *aZoneFileStream >> currentChar; } return currentStr; } virtual std::shared_ptr Load_Model(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_Material(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_MaterialPixelShader(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_MaterialTechSet(QDataStream *aZoneFileStream) { MaterialTechSet result = {}; // Load_MaterialTechSetPtr() qint32 techSetPtr; *aZoneFileStream >> techSetPtr; if (techSetPtr) { if (techSetPtr != -1 && techSetPtr != -2) { return nullptr; } // Load_MaterialTechSet() QByteArray varMaterialTechniqueSet(116, Qt::Uninitialized); aZoneFileStream->readRawData(varMaterialTechniqueSet.data(), 116); aZoneFileStream->skipRawData(4); result.name = Load_XString(aZoneFileStream); result.techniques = Load_MaterialTechniquePtrArray(aZoneFileStream, 26); } return std::make_shared(result); } virtual std::shared_ptr Load_GfxImage(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_SoundAliasList(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_SoundCurve(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_LoadedSound(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_ClipMap(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_ComWorld(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_GameWorldSp(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_GameWorldMp(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_MapEnts(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_GfxWorld(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_GfxLightPtr(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_GameFont(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_MenuList(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_MenuDef(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_LocalizeEntry(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_WeaponDef(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_SoundDriver(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_EffectDef(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_ImpactTable(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_RawFile(QDataStream *aZoneFileStream) = 0; virtual std::shared_ptr Load_StringTable(QDataStream *aZoneFileStream) = 0; virtual QVector> Load_MaterialTechniquePtrArray(QDataStream *aZoneFileStream, int count) { QVector> result; for (int i = 0; i < count; i++) { qint32 materialTechniquePtr; *aZoneFileStream >> materialTechniquePtr; if (materialTechniquePtr) { if (materialTechniquePtr == -1) { result << Load_MaterialTechnique(aZoneFileStream); } } } return result; } virtual std::shared_ptr Load_MaterialTechnique(QDataStream *aZoneFileStream) { int passCount; qDebug() << "D3DResource size: " << sizeof(D3DResource); return nullptr; } virtual std::shared_ptr Load_MaterialPassArray(QDataStream *aZoneFileStream) { return nullptr; } private slots: private: }; #endif // ASSETS_H