Files
jak-project/goal_src/jak3/engine/math/transformq-h.gc
T
Hat Kid 9a4929ac0c decomp3: some engine files (#3319)
- `vector-h`
- `gravity-h`
- `bounding-box-h`
- `matrix-h`
- `quaternion-h`
- `euler-h`
- `transform-h`
- `geometry-h`
- `trigonometry-h`
- `transformq-h`
- `bounding-box`
- `matrix`
- `matrix-compose`
- `transform`
- `quaternion`
- `euler`
- `trigonometry`

Not a whole lot of changes, just a couple of new functions and one new
file (`matrix-compose`).
2024-01-20 10:42:51 -05:00

76 lines
2.8 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: transformq-h.gc
;; name in dgo: transformq-h
;; dgos: GAME
;; DECOMP BEGINS
(deftype transformq (transform)
((quat quaternion :inline :overlay-at (-> rot data 0))
)
)
(deftype trsq (trs)
((quat quaternion :inline :overlay-at (-> rot data 0))
)
)
(deftype trsqv (trsq)
"A transform with:
- type information (child of [[basic]])
- rotation stored as quaternion
- velocity information.
This is a very commonly used type to represent the position of an in-game object.
The `root` of a process-drawable (the parent 'in-game object' type) is a [[trsqv]].
Additionally, the collision system uses [[trsqv]] as the parent type for foreground
collision objects ([[collide-shape]], [[collide-shape-moving]]).
As a result, this type has a lot of weird methods and extra stuff hidden in it."
((pause-adjust-distance meters :offset 4)
(nav-radius meters :offset 8)
(transv vector :inline)
(rotv vector :inline)
(scalev vector :inline)
(dir-targ quaternion :inline)
(angle-change-time time-frame)
(old-y-angle-diff float)
)
(:methods
(seek-toward-heading-vec! (_type_ vector float time-frame) quaternion)
(set-heading-vec! (_type_ vector) quaternion)
(seek-to-point-toward-point! (_type_ vector float time-frame) quaternion)
(point-toward-point! (_type_ vector) quaternion)
(seek-toward-yaw-angle! (_type_ float float time-frame) quaternion)
(set-yaw-angle-clear-roll-pitch! (_type_ float) quaternion)
(set-roll-to-grav! (_type_ float) quaternion)
(set-roll-to-grav-2! (_type_ float) quaternion)
(rotate-toward-orientation! (_type_ quaternion float float int int float) quaternion)
(set-quaternion! (_type_ quaternion) quaternion)
(set-heading-vec-clear-roll-pitch! (_type_ vector) quaternion)
(point-toward-point-clear-roll-pitch! (_type_ vector) quaternion)
(rot->dir-targ! (_type_) quaternion)
(y-angle (_type_) float)
(global-y-angle-to-point (_type_ vector) float)
(relative-y-angle-to-point (_type_ vector) float)
(roll-relative-to-gravity (_type_) float)
(set-and-limit-velocity (_type_ int vector float) trsqv)
(get-quaternion (_type_) quaternion)
)
)
(defmethod global-y-angle-to-point ((this trsqv) (arg0 vector))
"Get the angle in the xz plane from the position of this trsqv to the point arg0
(ignores our current yaw)."
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> this trans)))
)
(defmethod relative-y-angle-to-point ((this trsqv) (arg0 vector))
"Get the y angle between the current orientation and arg0
(how much we'd have to yaw to point at arg0)."
(deg-diff (y-angle this) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) arg0 (-> this trans))))
)