spring addition will be ordered to match hierarchy

This commit is contained in:
Turánszki János
2022-08-15 18:59:47 +02:00
parent c7da8a9dd3
commit 99b704d8c7
2 changed files with 15 additions and 2 deletions
+14
View File
@@ -158,6 +158,20 @@ void ComponentsWindow::Create(EditorComponent* _editor)
break;
case 5:
scene.springs.Create(entity);
// Springs are special because they are computed in ordered fashion
// So if we add a new spring that was parent of an other one, we move it in memory before the child
for (size_t i = 0; i < scene.springs.GetCount(); ++i)
{
Entity other = scene.springs.GetEntity(i);
const HierarchyComponent* hier = scene.hierarchy.GetComponent(other);
if (hier != nullptr && hier->parentID == entity)
{
size_t entity_index = scene.springs.GetCount() - 1; // last added entity (the parent)
scene.springs.MoveItem(entity_index, i); // will be moved before
break;
}
}
break;
case 6:
scene.inverse_kinematics.Create(entity);
+1 -2
View File
@@ -3294,7 +3294,6 @@ namespace wi::scene
const HierarchyComponent* hier = hierarchy.GetComponent(entity);
size_t parent_index = hier == nullptr ? ~0ull : transforms.GetIndex(hier->parentID);
//TransformComponent* parent_transform = hier == nullptr ? nullptr : transforms.GetComponent(hier->parentID);
if (parent_index != ~0ull)
{
// Spring hierarchy resolve depends on spring component order!
@@ -3358,7 +3357,7 @@ namespace wi::scene
{
for (size_t i = 0; i < transforms.GetCount(); ++i)
{
// IK shouldn't modify local space, so only update the world matrices!
// Springs shouldn't modify local space, so only update the world matrices!
transforms[i].world = transforms_temp[i].world;
}
}