56 lines
1.7 KiB
C++
56 lines
1.7 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, bool &valid);
|
|
|
|
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);
|
|
aiMesh *NewBGPlaneMesh();
|
|
|
|
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::map<std::string, unsigned int> mBGPMap;
|
|
std::vector<aiMesh*> mMeshes;
|
|
std::vector<aiMaterial*> mMaterials;
|
|
std::vector<aiTexture*> mTextures;
|
|
unsigned int GetArtObjectFromName(const std::string &name, IOSystem *pIOHandler);
|
|
unsigned int GetBackgroundPlaneFromName(const std::string &name, IOSystem *pIOHandler, bool &found);
|
|
};
|
|
}
|
|
|
|
#endif
|