Animation WIP merge #321

Merged
XiaoQiDigipen merged 76 commits from SP3-17-animation-system into main 2023-01-30 17:35:57 +08:00
6 changed files with 77 additions and 6 deletions
Showing only changes of commit 1a20eeed96 - Show all commits

View File

@ -9,12 +9,28 @@ Copyright (C) 2022 DigiPen Institute of Technology.
Reproduction or disclosure of this file or its contents without the prior written consent Reproduction or disclosure of this file or its contents without the prior written consent
of DigiPen Institute of Technology is prohibited. of DigiPen Institute of Technology is prohibited.
*//*************************************************************************************/ *//*************************************************************************************/
// Pre-compiled Header // Precompiled Header
#include "SHpch.h" #include "SHpch.h"
// Primary Include // Primary Include
#include "SHAnimationSystem.h" #include "SHAnimationSystem.h"
// Project Includes
#include "ECS_Base/Managers/SHComponentManager.h"
#include "SHAnimatorComponent.h"
namespace SHADE namespace SHADE
{ {
/*-----------------------------------------------------------------------------------*/
/* System Routine Functions - UpdateRoutine */
/*-----------------------------------------------------------------------------------*/
SHAnimationSystem::UpdateRoutine::UpdateRoutine()
: SHSystemRoutine("Animation System Update", false)
{}
void SHAnimationSystem::UpdateRoutine::Execute(double dt) noexcept
{
auto& animators = SHComponentManager::GetDense<SHAnimatorComponent>();
for (auto& animator : animators)
{
animator.Update(dt);
}
}
} }

View File

@ -25,8 +25,24 @@ namespace SHADE
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Type Definitions */ /* Type Definitions */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/// <summary>
/// System that is responsible for updating all animations.
/// </summary>
class SH_API SHAnimationSystem : public SHSystem class SH_API SHAnimationSystem : public SHSystem
{ {
public:
/*---------------------------------------------------------------------------------*/
/* Type Definitions */
/*---------------------------------------------------------------------------------*/
/// <summary>
/// Responsible for updating the playback of all animator components and computing
/// the required bone matrices.
/// </summary>
class SH_API UpdateRoutine final : public SHSystemRoutine
{
public:
UpdateRoutine();
void Execute(double dt) noexcept override final;
};
}; };
} }

View File

@ -9,7 +9,7 @@ Copyright (C) 2022 DigiPen Institute of Technology.
Reproduction or disclosure of this file or its contents without the prior written consent Reproduction or disclosure of this file or its contents without the prior written consent
of DigiPen Institute of Technology is prohibited. of DigiPen Institute of Technology is prohibited.
*//*************************************************************************************/ *//*************************************************************************************/
// Pre-compiled Header // Precompiled Header
#include "SHpch.h" #include "SHpch.h"
// Primary Include // Primary Include
#include "SHAnimatorComponent.h" #include "SHAnimatorComponent.h"
@ -19,7 +19,13 @@ of DigiPen Institute of Technology is prohibited.
namespace SHADE namespace SHADE
{ {
/*-----------------------------------------------------------------------------------*/
/* Update Functions */
/*-----------------------------------------------------------------------------------*/
void SHAnimatorComponent::Update(float dt)
{
// Set everything to identity
}
} }
RTTR_REGISTRATION RTTR_REGISTRATION

View File

@ -37,10 +37,29 @@ namespace SHADE
class SH_API SHAnimatorComponent final : public SHComponent class SH_API SHAnimatorComponent final : public SHComponent
{ {
public: public:
/*---------------------------------------------------------------------------------*/
/* Usage Functions */
/*---------------------------------------------------------------------------------*/
/*void Play();
void PlayFromStart();
void Pause();
void Stop();*/
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* Getter Functions */ /* Getter Functions */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
const std::vector<SHMatrix>& GetBoneMatrices() const noexcept { return boneMatrices; } const std::vector<SHMatrix>& GetBoneMatrices() const noexcept { return boneMatrices; }
bool IsPlaying() const { return isPlaying; }
/*---------------------------------------------------------------------------------*/
/* Update Functions */
/*---------------------------------------------------------------------------------*/
/// <summary>
/// Updates the current state of the animation if one is specified based on the
/// current animation clip and frames. This will update the bone matrices.
/// </summary>
/// <param name="dt">Time passed since the last frame.</param>
void Update(float dt);
private: private:
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
@ -49,6 +68,7 @@ namespace SHADE
Handle<SHRig> rig; Handle<SHRig> rig;
std::vector<SHMatrix> boneMatrices; std::vector<SHMatrix> boneMatrices;
float currPlaybackTime = 0.0f; float currPlaybackTime = 0.0f;
bool isPlaying = false;
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* RTTR */ /* RTTR */

View File

@ -30,6 +30,7 @@ namespace SHADE
return; return;
// Do a recursive depth first traversal to populate the rig // Do a recursive depth first traversal to populate the rig
nodeCount = 0;
rootNode = recurseCreateNode(asset, asset.root); rootNode = recurseCreateNode(asset, asset.root);
} }
@ -54,6 +55,11 @@ namespace SHADE
return {}; return {};
} }
int SHRig::GetNodeCount() const noexcept
{
return nodeCount;
}
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Helper Functions */ /* Helper Functions */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
@ -61,6 +67,7 @@ namespace SHADE
{ {
// Construct the node // Construct the node
auto newNode = nodeStore.Create(); auto newNode = nodeStore.Create();
++nodeCount;
// Fill the node with data // Fill the node with data
const auto& NODE_DATA = asset.nodeDataCollection.at(sourceNode->idRef); const auto& NODE_DATA = asset.nodeDataCollection.at(sourceNode->idRef);

View File

@ -53,7 +53,7 @@ namespace SHADE
explicit SHRig(const SHRigAsset& asset); explicit SHRig(const SHRigAsset& asset);
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* Usage Functions */ /* Getter Functions */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/// <summary> /// <summary>
/// Retrieves the name of a node. /// Retrieves the name of a node.
@ -73,6 +73,11 @@ namespace SHADE
/// handle will be provided. /// handle will be provided.
/// </returns> /// </returns>
Handle<Node> GetNode(const std::string& name) const noexcept; Handle<Node> GetNode(const std::string& name) const noexcept;
/// <summary>
/// Returns the number of nodes in the rig. This matches the number of bone matrices
/// needed.
/// </summary>
int GetNodeCount() const noexcept;
private: private:
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
@ -81,6 +86,7 @@ namespace SHADE
Handle<Node> rootNode; Handle<Node> rootNode;
std::unordered_map<Handle<Node>, std::string> nodeNames; std::unordered_map<Handle<Node>, std::string> nodeNames;
std::unordered_map<std::string, Handle<Node>> nodesByName; std::unordered_map<std::string, Handle<Node>> nodesByName;
int nodeCount = 0;
SHResourceLibrary<Node> nodeStore; SHResourceLibrary<Node> nodeStore;
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/