// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_UTILITY_FORMATS_MD5MESHPARSER_HPP #define NAZARA_UTILITY_FORMATS_MD5MESHPARSER_HPP #include #include #include #include #include #include #include namespace Nz { class NAZARA_UTILITY_API MD5MeshParser { public: struct Joint { std::string name; Int32 parent; Quaternionf bindOrient; Vector3f bindPos; }; using Triangle = Vector3ui; struct Vertex { Vector2f uv; unsigned int startWeight; unsigned int weightCount; }; struct Weight { Vector3f pos; float bias; unsigned int joint; }; struct Mesh { std::vector triangles; std::vector vertices; std::vector weights; std::string shader; }; MD5MeshParser(Stream& stream); ~MD5MeshParser(); bool Check(); const Joint* GetJoints() const; UInt32 GetJointCount() const; const Mesh* GetMeshes() const; UInt32 GetMeshCount() const; bool Parse(); private: bool Advance(bool required = true); void Error(const std::string& message); bool ParseJoints(); bool ParseMesh(); void Warning(const std::string& message); void UnrecognizedLine(bool error = false); std::vector m_joints; std::vector m_meshes; Stream& m_stream; StreamOptionFlags m_streamFlags; std::string m_currentLine; bool m_keepLastLine; unsigned int m_lineCount; unsigned int m_meshIndex; }; } #endif // NAZARA_UTILITY_FORMATS_MD5MESHPARSER_HPP