diff --git a/src/AcDream.Core/Physics/ShadowShape.cs b/src/AcDream.Core/Physics/ShadowShape.cs new file mode 100644 index 0000000..ccb81bb --- /dev/null +++ b/src/AcDream.Core/Physics/ShadowShape.cs @@ -0,0 +1,25 @@ +using System.Numerics; + +namespace AcDream.Core.Physics; + +/// +/// One collision-bearing shape attached to a logical PhysicsObj. +/// A door emits 3-4 (CylSphere(s) + Sphere(s) + Part-BSPs); a creature +/// may emit a few; a simple item zero. Positions and rotations are +/// LOCAL to the entity's origin so +/// can re-transform them when the entity moves. +/// +/// +/// Retail anchor: CPhysicsPart + CPhysicsPart::find_obj_collisions +/// at acclient_2013_pseudo_c.txt:275045-275055. Each part stores its +/// own transform and dispatches per-part collision to its GfxObj. +/// +/// +public readonly record struct ShadowShape( + uint GfxObjId, + Vector3 LocalPosition, + Quaternion LocalRotation, + float Scale, + ShadowCollisionType CollisionType, + float Radius, + float CylHeight);