diff --git a/include/Nazara/Core.hpp b/include/Nazara/Core.hpp index a1670f3d6..b58893686 100644 --- a/include/Nazara/Core.hpp +++ b/include/Nazara/Core.hpp @@ -104,7 +104,6 @@ #include #include #include -#include #include #include #include diff --git a/include/Nazara/Core/Animation.hpp b/include/Nazara/Core/Animation.hpp index b229882ac..6a6c4fb0c 100644 --- a/include/Nazara/Core/Animation.hpp +++ b/include/Nazara/Core/Animation.hpp @@ -58,6 +58,8 @@ namespace Nz { public: using Params = AnimationParams; + struct Sequence; + struct SequenceJoint; Animation(); Animation(const Animation&) = delete; @@ -97,6 +99,21 @@ namespace Nz static std::shared_ptr LoadFromMemory(const void* data, std::size_t size, const AnimationParams& params = AnimationParams()); static std::shared_ptr LoadFromStream(Stream& stream, const AnimationParams& params = AnimationParams()); + struct Sequence + { + std::string name; + UInt32 firstFrame; + UInt32 frameCount; + UInt32 frameRate; + }; + + struct SequenceJoint + { + Quaternionf rotation = Quaternionf::Identity(); + Vector3f position = Vector3f::Zero(); + Vector3f scale = Vector3f::Unit(); + }; + private: std::unique_ptr m_impl; }; diff --git a/include/Nazara/Core/Sequence.hpp b/include/Nazara/Core/Sequence.hpp deleted file mode 100644 index dc392a3a6..000000000 --- a/include/Nazara/Core/Sequence.hpp +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2024 Jérôme "SirLynix" Leclercq (lynix680@gmail.com) -// This file is part of the "Nazara Engine - Core module" -// For conditions of distribution and use, see copyright notice in Export.hpp - -#pragma once - -#ifndef NAZARA_CORE_SEQUENCE_HPP -#define NAZARA_CORE_SEQUENCE_HPP - -#include -#include -#include - -namespace Nz -{ - struct Sequence - { - std::string name; - UInt32 firstFrame; - UInt32 frameCount; - UInt32 frameRate; - }; - - struct SequenceJoint - { - Quaternionf rotation = Quaternionf::Identity(); - Vector3f position = Vector3f::Zero(); - Vector3f scale = Vector3f::Unit(); - }; -} - -#endif // NAZARA_CORE_SEQUENCE_HPP diff --git a/plugins/Assimp/Plugin.cpp b/plugins/Assimp/Plugin.cpp index 30105a572..47f235140 100644 --- a/plugins/Assimp/Plugin.cpp +++ b/plugins/Assimp/Plugin.cpp @@ -35,7 +35,6 @@ SOFTWARE. #include #include #include -#include #include #include #include @@ -293,7 +292,7 @@ Nz::Result, Nz::ResourceLoadingError> LoadAnimati anim->CreateSkeletal(maxFrameCount, parameters.skeleton->GetJointCount()); - Nz::Sequence sequence; + Nz::Animation::Sequence sequence; sequence.firstFrame = 0; sequence.frameCount = maxFrameCount; sequence.frameRate = static_cast((animation->mTicksPerSecond != 0.0) ? animation->mTicksPerSecond : 24.0); @@ -322,7 +321,7 @@ Nz::Result, Nz::ResourceLoadingError> LoadAnimati for (unsigned int frameIndex = 0; frameIndex < maxFrameCount; ++frameIndex) { - Nz::SequenceJoint* sequenceJoints = anim->GetSequenceJoints(frameIndex); + Nz::Animation::SequenceJoint* sequenceJoints = anim->GetSequenceJoints(frameIndex); double frameTime = frameIndex * animation->mDuration / maxFrameCount; @@ -376,7 +375,7 @@ Nz::Result, Nz::ResourceLoadingError> LoadAnimati for (unsigned int frameIndex = 0; frameIndex < maxFrameCount; ++frameIndex) { - Nz::SequenceJoint* sequenceJoints = anim->GetSequenceJoints(frameIndex); + Nz::Animation::SequenceJoint* sequenceJoints = anim->GetSequenceJoints(frameIndex); sequenceJoints[jointIndex].position = joint->GetPosition(); sequenceJoints[jointIndex].rotation = joint->GetRotation(); sequenceJoints[jointIndex].scale = joint->GetScale(); diff --git a/src/Nazara/Core/Animation.cpp b/src/Nazara/Core/Animation.cpp index f8af0d994..eef0b8234 100644 --- a/src/Nazara/Core/Animation.cpp +++ b/src/Nazara/Core/Animation.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -17,11 +16,11 @@ namespace Nz struct AnimationImpl { std::unordered_map, std::equal_to<>> sequenceMap; - std::vector sequences; - std::vector sequenceJoints; // Uniquement pour les animations squelettiques - AnimationType type; + std::vector sequences; + std::vector sequenceJoints; // Uniquement pour les animations squelettiques std::size_t frameCount; std::size_t jointCount; // Uniquement pour les animations squelettiques + AnimationType type; }; bool AnimationParams::IsValid() const @@ -130,7 +129,7 @@ namespace Nz return m_impl->jointCount; } - Sequence* Animation::GetSequence(std::string_view sequenceName) + auto Animation::GetSequence(std::string_view sequenceName) -> Sequence* { NazaraAssert(m_impl, "Animation not created"); @@ -144,7 +143,7 @@ namespace Nz return &m_impl->sequences[it->second]; } - Sequence* Animation::GetSequence(std::size_t index) + auto Animation::GetSequence(std::size_t index) -> Sequence* { NazaraAssert(m_impl, "Animation not created"); NazaraAssert(index < m_impl->sequences.size(), "Sequence index out of range"); @@ -152,7 +151,7 @@ namespace Nz return &m_impl->sequences[index]; } - const Sequence* Animation::GetSequence(std::string_view sequenceName) const + auto Animation::GetSequence(std::string_view sequenceName) const -> const Sequence* { NazaraAssert(m_impl, "Animation not created"); @@ -166,7 +165,7 @@ namespace Nz return &m_impl->sequences[it->second]; } - const Sequence* Animation::GetSequence(std::size_t index) const + auto Animation::GetSequence(std::size_t index) const -> const Sequence* { NazaraAssert(m_impl, "Animation not created"); NazaraAssert(index < m_impl->sequences.size(), "Sequence index out of range"); @@ -195,20 +194,20 @@ namespace Nz return it->second; } - SequenceJoint* Animation::GetSequenceJoints(std::size_t frameIndex) + auto Animation::GetSequenceJoints(std::size_t frameIndex) -> SequenceJoint* { NazaraAssert(m_impl, "Animation not created"); NazaraAssert(m_impl->type == AnimationType::Skeletal, "Animation is not skeletal"); - return &m_impl->sequenceJoints[frameIndex*m_impl->jointCount]; + return &m_impl->sequenceJoints[frameIndex * m_impl->jointCount]; } - const SequenceJoint* Animation::GetSequenceJoints(std::size_t frameIndex) const + auto Animation::GetSequenceJoints(std::size_t frameIndex) const -> const SequenceJoint* { NazaraAssert(m_impl, "Animation not created"); NazaraAssert(m_impl->type == AnimationType::Skeletal, "Animation is not skeletal"); - return &m_impl->sequenceJoints[frameIndex*m_impl->jointCount]; + return &m_impl->sequenceJoints[frameIndex * m_impl->jointCount]; } AnimationType Animation::GetType() const diff --git a/src/Nazara/Core/Formats/MD5AnimLoader.cpp b/src/Nazara/Core/Formats/MD5AnimLoader.cpp index 00c3477da..b6a97eff5 100644 --- a/src/Nazara/Core/Formats/MD5AnimLoader.cpp +++ b/src/Nazara/Core/Formats/MD5AnimLoader.cpp @@ -4,7 +4,6 @@ #include #include -#include #include namespace Nz @@ -45,7 +44,7 @@ namespace Nz std::shared_ptr animation = std::make_shared(); animation->CreateSkeletal(frameCount, jointCount); - Sequence sequence; + Animation::Sequence sequence; sequence.firstFrame = 0; sequence.frameCount = frameCount; sequence.frameRate = frameRate; @@ -53,7 +52,7 @@ namespace Nz animation->AddSequence(sequence); - SequenceJoint* sequenceJoints = animation->GetSequenceJoints(); + Animation::SequenceJoint* sequenceJoints = animation->GetSequenceJoints(); // Pour que le squelette soit correctement aligné, il faut appliquer un quaternion "de correction" aux joints à la base du squelette Quaternionf rotationQuat = Quaternionf::RotationBetween(Vector3f::UnitX(), Vector3f::Forward()) * @@ -68,7 +67,7 @@ namespace Nz { for (UInt32 jointIndex = 0; jointIndex < jointCount; ++jointIndex) { - SequenceJoint& sequenceJoint = sequenceJoints[frameIndex * jointCount + jointIndex]; + Animation::SequenceJoint& sequenceJoint = sequenceJoints[frameIndex * jointCount + jointIndex]; Int32 parentId = joints[jointIndex].parent; if (parentId >= 0)