using System.Numerics; namespace AcDream.App.Rendering.Wb { public class ActiveParticleEmitter { public ParticleEmitterRenderer Renderer { get; } public uint PartIndex { get; } public Matrix4x4 LocalOffset { get; } // Store reference info instead of struct copy. // ParentLandblock was ObjectLandblock (WB type) — typed as object? in Phase O-T7 // to remove the WorldBuilder project reference; no consumer reads it. public object? ParentLandblock { get; set; } // ParentInstanceId was WorldBuilder.Shared.Models.ObjectId? — erased to ulong? in T7; // the field is stored but never read by any consumer in our codebase. public ulong? ParentInstanceId { get; set; } public ActiveParticleEmitter(ParticleEmitterRenderer renderer, uint partIndex, Matrix4x4 localOffset, object? parentLandblock = null, ulong? parentInstanceId = null) { Renderer = renderer; PartIndex = partIndex; LocalOffset = localOffset; ParentLandblock = parentLandblock; ParentInstanceId = parentInstanceId; } public void Update(float deltaTime, Matrix4x4 parentTransform) { Renderer.ParentTransform = parentTransform; Renderer.LocalOffset = LocalOffset; Renderer.Update(deltaTime); } public void Render(ParticleBatcher batcher) { Renderer.Render(batcher); } public void Dispose() { Renderer.Dispose(); } } }