XPlor/libs/assets/assets.h
2025-06-07 11:20:47 -04:00

201 lines
7.3 KiB
C++

#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 <QDebug>
#include <QObject>
struct AssetMap {
QVector<std::shared_ptr<Animation>> animations;
QVector<std::shared_ptr<Model>> models;
QVector<std::shared_ptr<Material>> materials;
QVector<std::shared_ptr<MaterialPixelShader>> pixelShaders;
QVector<std::shared_ptr<MaterialTechSet>> techSets;
QVector<std::shared_ptr<GfxWorld>> gfxWorlds;
QVector<std::shared_ptr<GfxLightDef>> gfxLightDefs;
QVector<std::shared_ptr<GfxImage>> images;
QVector<std::shared_ptr<SoundAliasList>> sounds;
QVector<std::shared_ptr<SoundCurve>> soundCurves;
QVector<std::shared_ptr<LoadedSound>> loadedSounds;
QVector<std::shared_ptr<ClipMap>> clipMaps;
QVector<std::shared_ptr<ComWorld>> comWorlds;
QVector<std::shared_ptr<GameWorldSp>> gameWorldSPs;
QVector<std::shared_ptr<GameWorldMp>> gameWorldMPs;
QVector<std::shared_ptr<MapEnts>> mapEntities;
QVector<std::shared_ptr<GameFont>> fonts;
QVector<std::shared_ptr<MenuList>> menuLists;
QVector<std::shared_ptr<MenuDef>> menuDefinitions;
QVector<std::shared_ptr<LocalizeEntry>> localizeEntries;
QVector<std::shared_ptr<WeaponDef>> weaponDefinitions;
QVector<std::shared_ptr<SoundDriver>> soundDrivers;
QVector<std::shared_ptr<EffectDef>> effectDefinitions;
QVector<std::shared_ptr<ImpactTable>> impactTables;
QVector<std::shared_ptr<RawFile>> rawFiles;
QVector<std::shared_ptr<StringTable>> 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<Animation> 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<Animation>(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<Model> Load_Model(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<Material> Load_Material(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<MaterialPixelShader> Load_MaterialPixelShader(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<MaterialTechSet> 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<MaterialTechSet>(result);
}
virtual std::shared_ptr<GfxImage> Load_GfxImage(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<SoundAliasList> Load_SoundAliasList(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<SoundCurve> Load_SoundCurve(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<LoadedSound> Load_LoadedSound(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<ClipMap> Load_ClipMap(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<ComWorld> Load_ComWorld(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<GameWorldSp> Load_GameWorldSp(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<GameWorldMp> Load_GameWorldMp(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<MapEnts> Load_MapEnts(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<GfxWorld> Load_GfxWorld(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<GfxLightDef> Load_GfxLightPtr(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<GameFont> Load_GameFont(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<MenuList> Load_MenuList(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<MenuDef> Load_MenuDef(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<LocalizeEntry> Load_LocalizeEntry(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<WeaponDef> Load_WeaponDef(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<SoundDriver> Load_SoundDriver(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<EffectDef> Load_EffectDef(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<ImpactTable> Load_ImpactTable(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<RawFile> Load_RawFile(QDataStream *aZoneFileStream) = 0;
virtual std::shared_ptr<StringTable> Load_StringTable(QDataStream *aZoneFileStream) = 0;
virtual QVector<std::shared_ptr<MaterialTechnique>> Load_MaterialTechniquePtrArray(QDataStream *aZoneFileStream, int count) {
QVector<std::shared_ptr<MaterialTechnique>> 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<MaterialTechnique> Load_MaterialTechnique(QDataStream *aZoneFileStream) {
int passCount;
qDebug() << "D3DResource size: " << sizeof(D3DResource);
return nullptr;
}
virtual std::shared_ptr<MaterialPass> Load_MaterialPassArray(QDataStream *aZoneFileStream) {
return nullptr;
}
private slots:
private:
};
#endif // ASSETS_H