Files
2026-05-08 18:54:05 -04:00

276 lines
10 KiB
Common Lisp
Vendored
Generated

;;-*-Lisp-*-
(in-package goal)
;; definition of type collide-puss-sphere
(deftype collide-puss-sphere (structure)
"A query sphere from the user for the porbe-using-spheres query.
This is used internally by the collide-cache implementation."
((bsphere sphere :inline)
(bbox4w bounding-box4w :inline)
)
)
;; definition for method 3 of type collide-puss-sphere
(defmethod inspect ((this collide-puss-sphere))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'collide-puss-sphere)
(format #t "~1Tbsphere: #<sphere @ #x~X>~%" (-> this bsphere))
(format #t "~1Tbbox4w: #<bounding-box4w @ #x~X>~%" (-> this bbox4w))
(label cfg-4)
this
)
;; definition of type collide-puss-work
(deftype collide-puss-work (structure)
"Scratchpad memory map for probe-using-spheres query."
((closest-pt vector :inline)
(tri-normal vector :inline)
(tri-bbox4w bounding-box4w :inline)
(spheres-bbox4w bounding-box4w :inline)
(spheres collide-puss-sphere 64 :inline)
)
(:methods
(check-mesh-prim-against-spheres (_type_ collide-cache-prim collide-using-spheres-params) symbol)
(check-sphere-prim-against-spheres (_type_ collide-cache-prim collide-using-spheres-params) symbol)
)
)
;; definition for method 3 of type collide-puss-work
(defmethod inspect ((this collide-puss-work))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'collide-puss-work)
(format #t "~1Tclosest-pt: #<vector @ #x~X>~%" (-> this closest-pt))
(format #t "~1Ttri-normal: #<vector @ #x~X>~%" (-> this tri-normal))
(format #t "~1Ttri-bbox4w: #<bounding-box4w @ #x~X>~%" (-> this tri-bbox4w))
(format #t "~1Tspheres-bbox4w: #<bounding-box4w @ #x~X>~%" (-> this spheres-bbox4w))
(format #t "~1Tspheres[64] @ #x~X~%" (-> this spheres))
(label cfg-4)
this
)
;; definition of type collide-cache-tri
(deftype collide-cache-tri (structure)
"A single triangle inside the collision cache.
Contains a reference back to the source object (like a collide-shape or water-control), and the prim itself."
((vertex vector 3 :inline)
(extra-quad uint8 16)
(pat pat-surface :overlay-at (-> extra-quad 0))
(collide-ptr basic :overlay-at (-> extra-quad 4))
(prim-index uint16 :overlay-at (-> extra-quad 8))
(user16 uint16 :overlay-at (-> extra-quad 10))
(user32 uint32 :overlay-at (-> extra-quad 12))
(clear-flags uint128 :overlay-at (-> extra-quad 0))
)
)
;; definition for method 3 of type collide-cache-tri
(defmethod inspect ((this collide-cache-tri))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'collide-cache-tri)
(format #t "~1Tvertex[3] @ #x~X~%" (-> this vertex))
(format #t "~1Textra-quad[16] @ #x~X~%" (-> this extra-quad))
(format #t "~1Tpat: ~D~%" (-> this pat))
(format #t "~1Tcollide-ptr: ~A~%" (-> this collide-ptr))
(format #t "~1Tprim-index: ~D~%" (-> this prim-index))
(format #t "~1Tuser16: ~D~%" (-> this user16))
(format #t "~1Tuser32: ~D~%" (-> this user32))
(label cfg-4)
this
)
;; definition of type collide-cache-prim
(deftype collide-cache-prim (structure)
"A primitive inside the collide-cache.
This can represent a sphere, a triangle mesh, or a group of other primitives within a bounding sphere."
((prim-core collide-prim-core :inline)
(extra-quad uint8 16)
(ccache collide-cache :overlay-at (-> extra-quad 0))
(prim collide-shape-prim :overlay-at (-> extra-quad 4))
(first-tri uint16 :overlay-at (-> extra-quad 8))
(num-tris uint16 :overlay-at (-> extra-quad 10))
(extra basic :overlay-at (-> extra-quad 12))
(world-sphere vector :inline :overlay-at (-> prim-core world-sphere))
(collide-as collide-spec :overlay-at (-> prim-core collide-as))
(action collide-action :overlay-at (-> prim-core action))
(prim-type prim-type :overlay-at (-> prim-core prim-type))
)
(:methods
(resolve-moving-sphere-tri (_type_ collide-query sphere vector float collide-action) float)
(resolve-moving-sphere-sphere (_type_ collide-query sphere vector float collide-action) float)
)
)
;; definition for method 3 of type collide-cache-prim
(defmethod inspect ((this collide-cache-prim))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'collide-cache-prim)
(format #t "~1Tprim-core: #<collide-prim-core @ #x~X>~%" (-> this prim-core))
(format #t "~1Textra-quad[16] @ #x~X~%" (-> this extra-quad))
(format #t "~1Tccache: ~A~%" (-> this ccache))
(format #t "~1Tprim: ~A~%" (-> this prim))
(format #t "~1Tfirst-tri: ~D~%" (-> this first-tri))
(format #t "~1Tnum-tris: ~D~%" (-> this num-tris))
(format #t "~1Textra: ~A~%" (-> this extra))
(format #t "~1Tworld-sphere: ~`vector`P~%" (-> this prim-core))
(format #t "~1Tcollide-as: ~D~%" (-> this prim-core collide-as))
(format #t "~1Taction: ~D~%" (-> this prim-core action))
(format #t "~1Tprim-type: ~D~%" (-> this prim-core prim-type))
(label cfg-4)
this
)
;; definition of type collide-cache
(deftype collide-cache (basic)
"The collide-cache is a structure to accelerate collision queries.
In particular, it helps with queries where you don't know what you might hit.
It can detect collision with the background geometry, foreground dynamic collision shapes (spheres and meshes), and water.
To use it, it must first be 'filled' with geometry. Then you can manually inspect the geometry, or use one of the queries.
The supported queries are 'line-sphere' (raycast) and 'spheres' (check if intersecting anything).
It is not useful for ollision queries against a specific foreground object, like 'am I on top of platform X right now?'."
((num-tris int32)
(max-tris int32)
(num-prims int32)
(max-prims int32)
(ignore-mask pat-surface)
(ignore-processes process 2)
(collide-box bounding-box :inline)
(collide-box4w bounding-box4w :inline)
(collide-with collide-spec)
(unused uint32 3)
(prims collide-cache-prim 4)
(tris collide-cache-tri)
)
(:methods
(new (symbol type int int) _type_)
(collide-cache-method-9 () none)
(collide-cache-method-10 () none)
(collide-cache-method-11 () none)
(collide-cache-method-12 () none)
(collide-cache-method-13 () none)
(collide-cache-method-14 () none)
(collide-cache-method-15 () none)
(collide-cache-method-16 () none)
(collide-cache-method-17 () none)
(collide-cache-method-18 () none)
(collide-cache-method-19 () none)
(collide-cache-method-20 () none)
(collide-cache-method-21 () none)
(collide-cache-method-22 () none)
(collide-cache-method-23 () none)
(collide-cache-method-24 () none)
(collide-cache-method-25 () none)
(collide-cache-method-26 () none)
(collide-cache-method-27 () none)
)
)
;; definition for method 3 of type collide-cache
(defmethod inspect ((this collide-cache))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this (-> this type))
(format #t "~1Tnum-tris: ~D~%" (-> this num-tris))
(format #t "~1Tmax-tris: ~D~%" (-> this max-tris))
(format #t "~1Tnum-prims: ~D~%" (-> this num-prims))
(format #t "~1Tmax-prims: ~D~%" (-> this max-prims))
(format #t "~1Tignore-mask: ~D~%" (-> this ignore-mask))
(format #t "~1Tignore-processes[2] @ #x~X~%" (-> this ignore-processes))
(format #t "~1Tcollide-box: #<bounding-box @ #x~X>~%" (-> this collide-box))
(format #t "~1Tcollide-box4w: #<bounding-box4w @ #x~X>~%" (-> this collide-box4w))
(format #t "~1Tcollide-with: ~D~%" (-> this collide-with))
(format #t "~1Tunused: ~D~%" (-> this unused 0))
(format #t "~1Tprims: #x~X~%" (-> this prims 0))
(format #t "~1Ttris: #x~X~%" (-> this tris))
(label cfg-4)
this
)
;; definition of type collide-list-item
(deftype collide-list-item (structure)
"Entry on the broad-phase collision list.
Can represent instanced collision, as a TIE instance, or a single non-instanced mesh fragment."
((mesh instance-tie)
(inst basic)
)
:pack-me
)
;; definition for method 3 of type collide-list-item
(defmethod inspect ((this collide-list-item))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'collide-list-item)
(format #t "~1Tmesh: ~A~%" (-> this mesh))
(format #t "~1Tinst: ~A~%" (-> this inst))
(label cfg-4)
this
)
;; definition of type collide-list
(deftype collide-list (structure)
"List of items returned by the broad-phase collision query."
((num-items int32)
(items collide-list-item 256 :inline :offset 16)
)
)
;; definition for method 3 of type collide-list
(defmethod inspect ((this collide-list))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'collide-list)
(format #t "~1Tnum-items: ~D~%" (-> this num-items))
(format #t "~1Titems[256] @ #x~X~%" (-> this items))
(label cfg-4)
this
)
;; definition for method 0 of type collide-cache
(defmethod new collide-cache ((allocation symbol) (type-to-make type) (arg0 int) (arg1 int))
(let* ((s3-0 (logand -16 (+ (-> type-to-make size) 19)))
(gp-0 (* 48 arg0))
(v1-3 (* (+ arg1 1) 64))
(v0-0 (object-new allocation type-to-make (the-as int (+ s3-0 gp-0 v1-3))))
)
(set! (-> v0-0 max-tris) arg1)
(set! (-> v0-0 max-prims) arg0)
(set! (-> v0-0 prims 0) (the-as collide-cache-prim (logand -16 (+ (+ s3-0 15) (the-as uint v0-0)))))
(set! (-> v0-0 tris) (the-as collide-cache-tri (+ (the-as uint (-> v0-0 prims 0)) gp-0)))
v0-0
)
)
;; failed to figure out what this is:
(kmemopen global "collide-cache-buffers")
;; definition (perm) for symbol *collide-cache*, type collide-cache
(define-perm *collide-cache* collide-cache (new 'global 'collide-cache 100 460))
;; definition (perm) for symbol *collide-list*, type collide-list
(define-perm *collide-list* collide-list (new 'global 'collide-list))
;; failed to figure out what this is:
(kmemclose)