// Copyright (C) 2015 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_FORMATS_MD5ANIMPARSER_HPP #define NAZARA_FORMATS_MD5ANIMPARSER_HPP #include #include #include #include #include #include #include class NAZARA_UTILITY_API NzMD5AnimParser { public: struct FrameJoint { NzQuaternionf orient; NzVector3f pos; }; struct Frame { std::vector joints; NzBoxf bounds; }; struct Joint { NzQuaternionf bindOrient; NzString name; NzVector3f bindPos; int parent; unsigned int flags; unsigned int index; }; NzMD5AnimParser(NzInputStream& stream); ~NzMD5AnimParser(); nzTernary Check(); unsigned int GetAnimatedComponentCount() const; const Frame* GetFrames() const; unsigned int GetFrameCount() const; unsigned int GetFrameRate() const; const Joint* GetJoints() const; unsigned int GetJointCount() const; bool Parse(); private: bool Advance(bool required = true); void Error(const NzString& message); bool ParseBaseframe(); bool ParseBounds(); bool ParseFrame(); bool ParseHierarchy(); void Warning(const NzString& message); void UnrecognizedLine(bool error = false); std::vector m_animatedComponents; std::vector m_frames; std::vector m_joints; NzInputStream& m_stream; NzString m_currentLine; bool m_keepLastLine; unsigned int m_frameIndex; unsigned int m_frameRate; unsigned int m_lineCount; unsigned int m_streamFlags; }; #endif // NAZARA_FORMATS_MD5ANIMPARSER_HPP