// Copyright (C) 2021 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_ANIMATION_HPP #define NAZARA_UTILITY_ANIMATION_HPP #include #include #include #include #include #include #include #include #include #include #include namespace Nz { struct NAZARA_UTILITY_API AnimationParams : ResourceParameters { // La frame de fin à charger std::size_t endFrame = 0xFFFFFFFF; // La frame de début à charger std::size_t startFrame = 0; bool IsValid() const; }; class Animation; struct Sequence; struct SequenceJoint; class Skeleton; using AnimationLibrary = ObjectLibrary; using AnimationLoader = ResourceLoader; using AnimationManager = ResourceManager; struct AnimationImpl; class NAZARA_UTILITY_API Animation : public Resource { public: Animation(); Animation(const Animation&) = delete; Animation(Animation&&) noexcept; ~Animation(); bool AddSequence(const Sequence& sequence); void AnimateSkeleton(Skeleton* targetSkeleton, std::size_t frameA, std::size_t frameB, float interpolation) const; bool CreateSkeletal(std::size_t frameCount, std::size_t jointCount); void Destroy(); void EnableLoopPointInterpolation(bool loopPointInterpolation); std::size_t GetFrameCount() const; std::size_t GetJointCount() const; Sequence* GetSequence(const std::string& sequenceName); Sequence* GetSequence(std::size_t index); const Sequence* GetSequence(const std::string& sequenceName) const; const Sequence* GetSequence(std::size_t index) const; std::size_t GetSequenceCount() const; std::size_t GetSequenceIndex(const std::string& sequenceName) const; SequenceJoint* GetSequenceJoints(std::size_t frameIndex = 0); const SequenceJoint* GetSequenceJoints(std::size_t frameIndex = 0) const; AnimationType GetType() const; bool HasSequence(const std::string& sequenceName) const; bool HasSequence(std::size_t index = 0) const; bool IsLoopPointInterpolationEnabled() const; bool IsValid() const; void RemoveSequence(const std::string& sequenceName); void RemoveSequence(std::size_t index); Animation& operator=(const Animation&) = delete; Animation& operator=(Animation&&) noexcept; static std::shared_ptr LoadFromFile(const std::filesystem::path& filePath, const AnimationParams& params = AnimationParams()); 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()); private: std::unique_ptr m_impl; }; } #include #endif // NAZARA_UTILITY_ANIMATION_HPP