Vampire-Act-Mono/docs/architecture/adr-003.md

2.3 KiB

ADR-003: Pure C# Geometry & Math Library

Status: Accepted Date: 2026-04-27 Engine: Unity 2022.3.62f3c1 GDD Requirements Addressed: Combat Logic (hit detection), Form Switch SM (attack style shapes), Enemy AI (distance/range checks)


Context

L0 must not reference UnityEngine, but Combat Logic requires geometric intersection tests (circle vs rect vs sector), Form Switch SM needs distance calculations, and all systems need basic math utilities. A self-contained geometry/math library is required.

Decision

Build a minimal geometry library implementing only what Nightborn's combat systems actually need.

Type Inventory

Type Fields Methods Consumer
Vector3 float X, Y, Z Distance(Vector3), Normalize(), Length, Dot, Cross, +, -, * All modules
Circle Vector3 Center, float Radius Intersects(Circle), Intersects(Rect), Contains(Vector3) Combat (Mist form AOE)
Rect Vector3 Center, float Width, float Height, float Rotation Intersects(Circle), Intersects(Rect), Contains(Vector3) Combat (Wolf form dash)
Sector Vector3 Origin, float Radius, float Angle, float Direction Intersects(Circle), Contains(Vector3) Combat (Human form parry fan)
MathUtil Clamp, Lerp, InverseLerp, Remap, Approximately All modules

Explicitly Out of Scope

  • Full 3D geometry library — Nightborn is top-down/isometric, needs XZ plane only
  • Matrix operations — use System.Numerics.Matrix4x4 (.NET Standard 2.1 built-in)
  • Physics collision engine — only static intersection tests between geometric shapes

Why Not System.Numerics.Vector3

System.Numerics.Vector3 is available but its field names and method surface overlap with Unity's Vector3. Self-building avoids confusion for external developers juggling two Vector3 types. If SIMD performance becomes needed later, switching to System.Numerics is a drop-in replacement.

Consequences

  • Combat hit detection is fully self-contained and testable without Unity
  • Geometric types precisely match game needs (Sector directly addresses Human form's parry shape detection)
  • Tradeoff: maintaining a micro math library (~500 lines maximum)
  • If complex physics is needed later, re-evaluate against third-party libraries