diff --git a/include/Engine/Rendering/ModelJob.h b/include/Engine/Rendering/ModelJob.h index 212a3888..c10d6389 100644 --- a/include/Engine/Rendering/ModelJob.h +++ b/include/Engine/Rendering/ModelJob.h @@ -125,7 +125,7 @@ struct ModelJob : RenderJob if (Skeleton != nullptr) { EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID); - BlendTree = new ::BlendTree(entityWrapper, Skeleton); + BlendTree = std::shared_ptr<::BlendTree>(new ::BlendTree(entityWrapper, Skeleton)); } } }; @@ -149,7 +149,7 @@ struct ModelJob : RenderJob std::vector<::Skeleton::AnimationData> Animations; ::Skeleton::AnimationOffset AnimationOffset; - ::BlendTree* BlendTree = nullptr; + std::shared_ptr<::BlendTree> BlendTree = nullptr; glm::vec4 DiffuseColor; glm::vec4 SpecularColor; diff --git a/resources/Schema/Entities/AnimationTests2.xml b/resources/Schema/Entities/AnimationTests2.xml index ace71800..659ece9a 100644 --- a/resources/Schema/Entities/AnimationTests2.xml +++ b/resources/Schema/Entities/AnimationTests2.xml @@ -68,6 +68,7 @@ BlendOverride AimAdditive + 1 Models/Characters/Assault/AssaultAnimations.mesh @@ -93,7 +94,7 @@ AimRifle - + 0.5 true @@ -106,6 +107,7 @@ ShootRifleAnimation BlendWalkRun + 0 @@ -124,7 +126,7 @@ Run - + 1 @@ -135,7 +137,7 @@ Walk - + 1 @@ -148,7 +150,7 @@ ShootFastRifle - + 1 diff --git a/src/Engine/Rendering/BlendTree.cpp b/src/Engine/Rendering/BlendTree.cpp index 43d1d5fd..e5fb21a4 100644 --- a/src/Engine/Rendering/BlendTree.cpp +++ b/src/Engine/Rendering/BlendTree.cpp @@ -53,7 +53,25 @@ BlendTree::BlendTree(EntityWrapper ModelEntity, Skeleton* skeleton) BlendTree::~BlendTree() { + Node* currentNode = m_Root; + while (currentNode->Child[0] != nullptr) { + currentNode = currentNode->Child[0]; + } + + std::list m_NodesToRemove; + + while (currentNode != nullptr) { + currentNode = currentNode->Next(); + m_NodesToRemove.push_back(currentNode); + } + + for (auto it = m_NodesToRemove.begin(); it != m_NodesToRemove.end(); it++) { + if ((*it) != nullptr) { + delete (*it); + (*it) = nullptr; + } + } } void BlendTree::PrintTree() diff --git a/src/Engine/Rendering/Skeleton.cpp b/src/Engine/Rendering/Skeleton.cpp index 4745b36d..6a409d3c 100644 --- a/src/Engine/Rendering/Skeleton.cpp +++ b/src/Engine/Rendering/Skeleton.cpp @@ -591,12 +591,14 @@ std::vector Skeleton::OverridePose(std::vector overridePos return finalPose; } - for (int i = 0; i < overridePose.size(); i++) { + for (int i = 0; i < targetPose.size(); i++) { if(overridePose[i] != glm::mat4(1)) { finalPose.push_back(overridePose[i]); } else { finalPose.push_back(targetPose[i]); } + + //finalPose.push_back(overridePose[i]); } return finalPose;