fix(vfx): classify hardwareless particle emitters once

This commit is contained in:
Erik 2026-07-27 00:03:31 +02:00
parent 921712f412
commit 5b3fb17775
8 changed files with 374 additions and 18 deletions

View file

@ -264,6 +264,29 @@ public sealed class ParticleHookSinkTests
Assert.Contains($"0x{Owner:X8}", diagnostic, StringComparison.Ordinal);
}
[Fact]
public void MissingEmitterAsset_ReportsOnlyOnceAcrossManyOwners()
{
const uint missingId = 0x32DEAD00u;
const uint secondOwner = Owner + 1u;
var registry = new EmitterDescRegistry();
var system = new ParticleSystem(registry, new Random(42));
var poses = new MutablePoseSource();
poses.Publish(Owner, Matrix4x4.Identity, Matrix4x4.Identity);
poses.Publish(secondOwner, Matrix4x4.Identity, Matrix4x4.Identity);
var sink = new ParticleHookSink(system, poses);
var diagnostics = new List<string>();
sink.DiagnosticSink = diagnostics.Add;
sink.OnHook(Owner, Vector3.Zero, Create(missingId, logicalId: 0u));
sink.OnHook(secondOwner, Vector3.Zero, Create(missingId, logicalId: 0u));
sink.OnHook(Owner, Vector3.Zero, Create(missingId, logicalId: 0u));
Assert.Empty(system.EnumerateEmitters());
Assert.Single(diagnostics);
Assert.Contains($"0x{missingId:X8}", diagnostics[0], StringComparison.Ordinal);
}
[Fact]
public void MissingLivePose_HidesPresentationWithoutEndingEmitterLifetime()
{