diff --git a/Nuake/src/Resource/SkeletonNode.h b/Nuake/src/Resource/SkeletonNode.h index 3cd7e5e9..32b54a3b 100644 --- a/Nuake/src/Resource/SkeletonNode.h +++ b/Nuake/src/Resource/SkeletonNode.h @@ -13,5 +13,6 @@ namespace Nuake std::vector Children; Matrix4 FinalTransform = Matrix4(1.0f); int32_t Id = -1; + int32_t EntityHandle = 0; }; } \ No newline at end of file diff --git a/Nuake/src/Scene/Components/SkinnedModelComponent.h b/Nuake/src/Scene/Components/SkinnedModelComponent.h index e536275f..0e6bdb53 100644 --- a/Nuake/src/Scene/Components/SkinnedModelComponent.h +++ b/Nuake/src/Scene/Components/SkinnedModelComponent.h @@ -24,7 +24,11 @@ namespace Nuake { BEGIN_SERIALIZE(); SERIALIZE_VAL(ModelPath); - SERIALIZE_OBJECT(ModelResource); + + if (ModelResource) + { + SERIALIZE_OBJECT(ModelResource); + } END_SERIALIZE(); } diff --git a/Nuake/src/Scene/Scene.cpp b/Nuake/src/Scene/Scene.cpp index 8ba2d6ec..59fb078d 100644 --- a/Nuake/src/Scene/Scene.cpp +++ b/Nuake/src/Scene/Scene.cpp @@ -484,9 +484,11 @@ namespace Nuake auto& skeletonRoot = component.ModelResource->GetSkeletonRootNode(); Entity skeletonRootEntity = CreateEntity(skeletonRoot.Name); - skeletonRootEntity.AddComponent(); + skeletonRootEntity.AddComponent().Name = skeletonRoot.Name; + skeletonRoot.EntityHandle = skeletonRootEntity.GetHandle(); entity.AddChild(skeletonRootEntity); + Vector3 bonePosition; Quat boneRotation; Vector3 boneScale; @@ -509,6 +511,8 @@ namespace Nuake boneEntity.AddComponent(); entity.AddChild(boneEntity); + c.EntityHandle = boneEntity.GetHandle(); + Vector3 bonePosition; Quat boneRotation; Vector3 boneScale; diff --git a/Nuake/src/Scene/Systems/AnimationSystem.cpp b/Nuake/src/Scene/Systems/AnimationSystem.cpp index a3a54f18..75e8a4a2 100644 --- a/Nuake/src/Scene/Systems/AnimationSystem.cpp +++ b/Nuake/src/Scene/Systems/AnimationSystem.cpp @@ -50,12 +50,14 @@ namespace Nuake auto& animationTrack = animation->GetTrack(boneName); Entity& boneEntity = m_Scene->GetEntity(boneName); - if (boneEntity.GetHandle() != -1) + Entity& boneEnt = Entity{ (entt::entity)bone.EntityHandle, m_Scene }; + ///assert(boneEnt.GetHandle() == boneEntity.GetHandle()); + if (boneEnt.GetHandle() != 0) { - auto& transformComponent = boneEntity.GetComponent(); + auto& transformComponent = boneEnt.GetComponent(); bone.FinalTransform = transformComponent.GetGlobalTransform() * bone.Offset; - if (!animationTrack.IsEmpty()) + //if (!animationTrack.IsEmpty()) { // Get Update transform animationTrack.Update(time); @@ -74,6 +76,7 @@ namespace Nuake transformComponent.Dirty = false; } } + for (auto& childBone : bone.Children) { UpdateBonePositionTraversal(childBone, animation, time);