Fix missing particle layout attributes when using Particle Emitter Function

#1640
This commit is contained in:
Wojtek Figat
2023-10-12 17:39:42 +02:00
parent bd4127676b
commit 8af2f458d7
3 changed files with 29 additions and 11 deletions

View File

@@ -9,6 +9,27 @@
#endif
#include "Engine/Content/Factories/BinaryAssetFactory.h"
void InitParticleEmitterFunctionCall(const Guid& assetId, AssetReference<Asset>& asset, bool& usesParticleData, ParticleLayout& layout)
{
const auto function = Content::Load<ParticleEmitterFunction>(assetId);
asset = function;
if (function)
{
// Insert any used particle data into the calling graph
for (const ParticleAttribute& e : function->Graph.Layout.Attributes)
{
if (layout.FindAttribute(e.Name, e.ValueType) == -1)
layout.AddAttribute(e.Name, e.ValueType);
}
// Detect if function needs to be evaluated per-particle
for (int32 i = 0; i < function->Outputs.Count() && !usesParticleData; i++)
{
usesParticleData = function->Graph.Nodes[function->Outputs.Get()[i]].UsesParticleData;
}
}
}
REGISTER_BINARY_ASSET(ParticleEmitterFunction, "FlaxEngine.ParticleEmitterFunction", false);
ParticleEmitterFunction::ParticleEmitterFunction(const SpawnParams& params, const AssetInfo* info)