Fix bug with Vector Parameters in Animation Graph

#272
This commit is contained in:
Wojtek Figat
2021-03-18 14:18:40 +01:00
parent 5c171c8b58
commit 922201d1c0
2 changed files with 64 additions and 2 deletions

View File

@@ -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:

View File

@@ -72,7 +72,7 @@ void ParticleEmitterGraphCPUExecutor::ProcessGroupParameters(Box* box, Node* nod
case 3:
value = matrix.GetRow4();
break;
default: CRASH;
default:
break;
}
break;