feat(phys): add ShadowShape record (no callers yet)
Standalone record representing one collision-bearing shape attached to a logical PhysicsObj. Foundation for the per-part BSP collision fix that closes the M1.5 "doors don't block" bug. Spec at docs/superpowers/specs/2026-05-24-door-collision-per-part-bsp-design.md. No callers in this commit; integration follows in subsequent commits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
8d4f14c173
commit
ab4278c272
1 changed files with 25 additions and 0 deletions
25
src/AcDream.Core/Physics/ShadowShape.cs
Normal file
25
src/AcDream.Core/Physics/ShadowShape.cs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
using System.Numerics;
|
||||
|
||||
namespace AcDream.Core.Physics;
|
||||
|
||||
/// <summary>
|
||||
/// 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 <see cref="ShadowObjectRegistry.UpdatePosition"/>
|
||||
/// can re-transform them when the entity moves.
|
||||
///
|
||||
/// <para>
|
||||
/// Retail anchor: <c>CPhysicsPart</c> + <c>CPhysicsPart::find_obj_collisions</c>
|
||||
/// at <c>acclient_2013_pseudo_c.txt:275045-275055</c>. Each part stores its
|
||||
/// own transform and dispatches per-part collision to its GfxObj.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public readonly record struct ShadowShape(
|
||||
uint GfxObjId,
|
||||
Vector3 LocalPosition,
|
||||
Quaternion LocalRotation,
|
||||
float Scale,
|
||||
ShadowCollisionType CollisionType,
|
||||
float Radius,
|
||||
float CylHeight);
|
||||
Loading…
Add table
Add a link
Reference in a new issue