using System.Numerics; namespace AcDream.Core.Physics; /// /// Result of : the validated /// position after collision, the cell the entity ended up in, /// and whether they're standing on a surface. /// /// /// L.3a (2026-04-30): added optional collision-normal fields so the /// caller (typically ) /// can apply retail's velocity-reflection bounce /// (v_new = v - (1 + elasticity) * dot(v, n) * n) to the /// PhysicsBody after the geometric resolve completes. ACE port mirror: /// references/ACE/Source/ACE.Server/Physics/PhysicsObj.cs:2692-2697; /// retail equivalent: CPhysicsObj::handle_all_collisions at /// acclient_2013_pseudo_c.txt:282699-282715. /// /// public readonly record struct ResolveResult( Vector3 Position, uint CellId, bool IsOnGround, /// True when a wall collision occurred during this resolve /// and is meaningful. bool CollisionNormalValid = false, /// Outward surface normal of the wall the sphere hit. Used /// by the velocity-reflection step. Pointing away from the wall. Vector3 CollisionNormal = default);