Finishing the 2D lane's unfinished work: the collision family was written and had no tests when the session ended. It is the best material a headless table gets, since every one of these is pure and needs no GL context. Two plausible tests in a row turned out to check nothing, and that is the part worth keeping. A struct round trip is symmetric and passes for any field order - the texture lane found that one. The second is subtler: no axis-aligned geometry can pin Vector2's fields, because exchanging x and y is a reflection that is applied on the way in and undone on the way out. Swapping the shim's own typedef leaves every collision case passing. Distances never even see it. What does pin Vector2 is the rotated camera, because a rotation is not axis-aligned and does not commute with the reflection. That case is load-bearing and the comment now says so, because the collision cases look like they cover the same ground and do not. What the new cases do pin is Rectangle, completely: swapping width and height turns three of the four predicates the wrong way. Verified by doing it. collision-lines answers (Option Vector2) rather than a bool and an out-parameter, because raylib leaves the out-parameter untouched when the segments do not meet and a caller who forgets reads whatever was there.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%