From 922201d1c03f9b96f6a334a4a5e73fa0b349ac47 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 18 Mar 2021 14:18:40 +0100 Subject: [PATCH] Fix bug with Vector Parameters in Animation Graph #272 --- .../Animations/Graph/AnimGroup.Animation.cpp | 64 ++++++++++++++++++- .../ParticleEmitterGraph.CPU.Particles.cpp | 2 +- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp b/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp index 1a26318a1..2497dfe3e 100644 --- a/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp +++ b/Source/Engine/Animations/Graph/AnimGroup.Animation.cpp @@ -451,7 +451,69 @@ void AnimGraphExecutor::ProcessGroupParameters(Box* box, Node* node, Value& valu // Get parameter int32 paramIndex; const auto param = _graph.GetParameter((Guid)node->Values[0], paramIndex); - value = param ? _data->Parameters[paramIndex].Value : Value::Null; + if (param) + { + value = _data->Parameters[paramIndex].Value; + switch (param->Type.Type) + { + case VariantType::Vector2: + switch (box->ID) + { + case 1: + case 2: + value = value.AsVector2().Raw[box->ID - 1]; + break; + } + break; + case VariantType::Vector3: + switch (box->ID) + { + case 1: + case 2: + case 3: + value = value.AsVector3().Raw[box->ID - 1]; + break; + } + break; + case VariantType::Vector4: + case VariantType::Color: + switch (box->ID) + { + case 1: + case 2: + case 3: + case 4: + value = value.AsVector4().Raw[box->ID - 1]; + break; + } + break; + case VariantType::Matrix: + { + auto& matrix = value.Type.Type == VariantType::Matrix && value.AsBlob.Data ? *(Matrix*)value.AsBlob.Data : Matrix::Identity; + switch (box->ID) + { + case 0: + value = matrix.GetRow1(); + break; + case 1: + value = matrix.GetRow2(); + break; + case 2: + value = matrix.GetRow3(); + break; + case 3: + value = matrix.GetRow4(); + break; + } + break; + } + } + } + else + { + // TODO: add warning that no parameter selected + value = Value::Zero; + } break; } default: diff --git a/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.Particles.cpp b/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.Particles.cpp index 9a7f92080..019dc41f3 100644 --- a/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.Particles.cpp +++ b/Source/Engine/Particles/Graph/CPU/ParticleEmitterGraph.CPU.Particles.cpp @@ -72,7 +72,7 @@ void ParticleEmitterGraphCPUExecutor::ProcessGroupParameters(Box* box, Node* nod case 3: value = matrix.GetRow4(); break; - default: CRASH; + default: break; } break;