using System.Numerics;
namespace AcDream.Core.Vfx;
///
/// Read-only view of the final pose used by entity-attached effects.
/// Implementations publish poses on the update/render thread after root motion,
/// animation, and equipped-child composition have completed.
///
public interface IEntityEffectPoseSource
{
bool TryGetRootPose(uint localEntityId, out Matrix4x4 rootWorld);
bool TryGetPartPose(uint localEntityId, int partIndex, out Matrix4x4 partLocal);
}
///
/// Optional update-thread notification surface for pose registries. Effect
/// consumers use this to refresh only owners whose final root, part, or cell
/// pose actually changed instead of polling every retained owner each frame.
///
///
/// Notifications are synchronous and occur after the new pose is published.
/// Implementations must suppress notifications when a publish is byte-for-byte
/// equivalent to the current pose. Consumers must not mutate the pose source
/// from inside the callback.
///
public interface IEntityEffectPoseChangeSource
{
event Action? EffectPoseChanged;
}
///
/// Optional spatial companion for consumers, such as object lights, whose
/// render registration is scoped to the owner's current AC cell.
///
public interface IEntityEffectCellSource
{
bool TryGetCellId(uint localEntityId, out uint cellId);
}