assimp-fez/code/AssetLib/FEZ/FezLoader.h

53 lines
1.5 KiB
C++

#ifndef AI_FEZLOADER_H_INC
#define AI_FEZLOADER_H_INC
#include <assimp/BaseImporter.h>
#include <assimp/XmlParser.h>
#include <assimp/mesh.h>
#include <assimp/material.h>
#include <assimp/texture.h>
#include <map>
#include <filesystem>
namespace Assimp {
class FezLoader : public BaseImporter {
public:
FezLoader();
~FezLoader() override;
bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const override;
protected:
const aiImporterDesc *GetInfo() const override;
void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) override;
unsigned int GetTrileMeshFromId(const int trileId);
aiVector3D GetFezVec3(const XmlNode &t, bool direct = false);
aiQuaternion GetFezQuat(const XmlNode &t, bool direct = false);
aiVector2D GetFezVec2(const XmlNode &t, bool direct = false);
void AddTrileInstances(const XmlNode &tis, aiNode *trileRoot);
aiMesh *CreateMesh(const XmlNode &xmlSIIP);
aiTexture *CreateTex(const std::string &path, IOSystem *pIOHandler);
private:
std::filesystem::path mFezAssetDir;
std::string mFileName;
XmlParser mLevelParser;
XmlParser mTrileParser;
std::map<int, XmlNode> mTriles;
std::map<int, unsigned int> mTrileMap;
std::map<std::string, unsigned int> mAOMap;
std::vector<aiMesh*> mMeshes;
std::vector<aiMaterial*> mMaterials;
std::vector<aiTexture*> mTextures;
unsigned int GetArtObjectFromName(const std::string &name, IOSystem *pIOHandler);
};
}
#endif