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;