// Copyright (C) 2013 Jérôme Leclercq // 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_LOADERS_MD5MESH_PARSER_HPP #define NAZARA_LOADERS_MD5MESH_PARSER_HPP #include #include #include #include #include #include #include class NzMD5MeshParser { public: NzMD5MeshParser(NzInputStream& stream, const NzMeshParams& parameters); ~NzMD5MeshParser(); nzTernary Check(); bool Parse(NzMesh* mesh); private: struct Joint { NzQuaternionf bindOrient; NzString name; NzVector3f bindPos; int parent; }; struct Mesh { typedef NzVector3ui Triangle; struct Vertex { NzVector2f uv; unsigned int startWeight; unsigned int weightCount; }; struct Weight { NzVector3f pos; float bias; unsigned int joint; }; std::vector triangles; std::vector vertices; std::vector weights; NzString shader; }; bool Advance(bool required = true); void Error(const NzString& message); bool ParseJoints(); bool ParseMesh(); void Warning(const NzString& message); void UnrecognizedLine(bool error = false); std::vector m_joints; std::vector m_meshes; NzInputStream& m_stream; NzString m_currentLine; const NzMeshParams& m_parameters; bool m_keepLastLine; unsigned int m_lineCount; unsigned int m_meshIndex; unsigned int m_streamFlags; }; #endif // NAZARA_LOADERS_MD5MESH_PARSER_HPP