;;-*-Lisp-*- (in-package goal) ;; definition for function cam-helper-temp ;; INFO: Used lq/sq (defbehavior cam-helper-temp camera-combiner ((arg0 (pointer camera-slave)) (arg1 (pointer camera-slave)) (arg2 float)) (let ((sv-144 (-> arg0 0 tracking)) (s1-0 (-> arg0 0 trans)) (gp-0 (-> arg1 0 tracking)) (s0-0 (-> arg1 0 trans)) ) (cond ((= (-> self tracking-status) 3) (cam-calc-follow! (-> self tracking) s1-0 #t) (slave-set-rotation! (-> self tracking) s1-0 (the-as cam-slave-options-u32 (-> self tracking-options)) (-> self fov) #t ) (set! sv-144 (-> self tracking)) (set! s1-0 (-> self trans)) ) ((= (-> self tracking-status) 2) (cam-calc-follow! (-> self tracking) s0-0 #t) (slave-set-rotation! (-> self tracking) s0-0 (the-as cam-slave-options-u32 (-> self tracking-options)) (-> self fov) #t ) (set! gp-0 (-> self tracking)) (set! s0-0 (-> self trans)) ) ) (let ((s2-0 (new 'stack-no-clear 'matrix))) (dotimes (v1-14 3) (set! (-> s2-0 quad v1-14) (the-as uint128 0)) ) 0.0 0.0 0.0 (let ((s4-0 (new-stack-vector0))) 0.0 (let ((s3-0 (new-stack-matrix0))) (vector-! (-> s2-0 vector 0) (the-as vector (-> sv-144 inv-mat)) (the-as vector (-> gp-0 inv-mat))) (vector-! (-> s2-0 vector 1) (-> sv-144 inv-mat vector 1) (-> gp-0 inv-mat vector 1)) (vector-! (-> s2-0 vector 2) (-> sv-144 inv-mat vector 2) (-> gp-0 inv-mat vector 2)) (let ((f0-6 (vector-length (-> s2-0 vector 0))) (f1-0 (vector-length (-> s2-0 vector 1))) (f2-0 (vector-length (-> s2-0 vector 2))) ) (cond ((and (< f0-6 f1-0) (< f0-6 f2-0)) (vector-cross! s4-0 (-> s2-0 vector 1) (-> s2-0 vector 2)) ) ((and (< f1-0 f0-6) (< f1-0 f2-0)) (vector-cross! s4-0 (-> s2-0 vector 0) (-> s2-0 vector 2)) ) (else (vector-cross! s4-0 (-> s2-0 vector 0) (-> s2-0 vector 1)) ) ) ) (vector-normalize! s4-0 1.0) (let ((f0-9 (fabs (vector-dot (the-as vector (-> sv-144 inv-mat)) s4-0))) (f1-3 (fabs (vector-dot (-> sv-144 inv-mat vector 1) s4-0))) (f2-3 (fabs (vector-dot (-> sv-144 inv-mat vector 2) s4-0))) ) (cond ((and (< f0-9 f1-3) (< f0-9 f2-3)) (vector-flatten! (-> s2-0 vector 0) (the-as vector (-> sv-144 inv-mat)) s4-0) (vector-flatten! (-> s2-0 vector 1) (the-as vector (-> gp-0 inv-mat)) s4-0) ) ((< f1-3 f2-3) (vector-flatten! (-> s2-0 vector 0) (-> sv-144 inv-mat vector 1) s4-0) (vector-flatten! (-> s2-0 vector 1) (-> gp-0 inv-mat vector 1) s4-0) ) (else (vector-flatten! (-> s2-0 vector 0) (-> sv-144 inv-mat vector 2) s4-0) (vector-flatten! (-> s2-0 vector 1) (-> gp-0 inv-mat vector 2) s4-0) ) ) ) (vector-normalize! (-> s2-0 vector 0) 1.0) (vector-normalize! (-> s2-0 vector 1) 1.0) (vector-cross! (-> s2-0 vector 2) (-> s2-0 vector 0) (-> s2-0 vector 1)) (if (< (vector-dot (-> s2-0 vector 2) s4-0) 0.0) (vector-negate! s4-0 s4-0) ) (let ((f30-0 (acos (vector-dot (-> s2-0 vector 0) (-> s2-0 vector 1))))) (cond ((logtest? (-> *camera* master-options) (cam-master-options-u32 SET_COMBINER_AXIS)) (logclear! (-> *camera* master-options) (cam-master-options-u32 SET_COMBINER_AXIS FLIP_COMBINER)) (when (and (< 8192.0 f30-0) (logtest? (-> *camera* master-options) (cam-master-options-u32 HAVE_TARGET))) (vector-! (-> s2-0 vector 0) (-> *camera* tpos-curr) s1-0) (vector-! (-> s2-0 vector 1) s0-0 s1-0) (vector-flatten! (-> s2-0 vector 0) (-> s2-0 vector 0) (-> *camera* local-down)) (vector-flatten! (-> s2-0 vector 1) (-> s2-0 vector 1) (-> *camera* local-down)) (when (and (< 4096.0 (vector-normalize-ret-len! (-> s2-0 vector 0) 1.0)) (< 4096.0 (vector-normalize-ret-len! (-> s2-0 vector 1) 1.0)) ) (vector-cross! (-> s2-0 vector 2) (-> s2-0 vector 1) (-> s2-0 vector 0)) (when (< (vector-dot (-> s2-0 vector 2) s4-0) -0.01) ) ) ) ) ((and (< 16384.0 f30-0) (< (vector-dot (-> self flip-control-axis) s4-0) 0.0)) (logxor! (-> *camera* master-options) (cam-master-options-u32 FLIP_COMBINER)) ) ) (set! (-> self flip-control-axis quad) (-> s4-0 quad)) (when (logtest? (-> *camera* master-options) (cam-master-options-u32 FLIP_COMBINER)) (set! f30-0 (- 65536.0 f30-0)) (vector-negate! s4-0 s4-0) ) (let ((f30-1 (* f30-0 (- 1.0 arg2)))) (matrix-axis-sin-cos! s3-0 s4-0 (sin f30-1) (cos f30-1)) ) ) (matrix*! (-> self inv-camera-rot) (-> gp-0 inv-mat) s3-0) ) ) ) ) ) ;; failed to figure out what this is: (defstate cam-combiner-active (camera-combiner) :event (behavior ((proc process) (argc int) (message symbol) (block event-message-block)) (local-vars (v0-0 object)) (case message (('fast-rot) (set! v0-0 #t) (set! (-> self fast-rot) (the-as basic v0-0)) v0-0 ) (('set-interpolation) (let ((f0-1 (the float (-> block param 0)))) (cond ((>= 0.0 f0-1) (set! (-> self interp-val) 1.0) ) (else (set! (-> self interp-val) 0.0) (set! (-> self interp-step) (/ 5.0 f0-1)) ) ) ) ) (('teleport) (when (nonzero? (-> self tracking-status)) (jump-to-target! (-> self tracking point-of-interest-blend) 0.0) (cam-calc-follow! (-> self tracking) (-> self trans) #f) (slave-set-rotation! (-> self tracking) (-> self trans) (the-as cam-slave-options-u32 (-> self tracking-options)) (-> self fov) #f ) ) ) (('stop-tracking) (set! (-> self tracking-status) (the-as uint 0)) 0 ) (('start-tracking) (cond ((< argc 1) (let ((t9-3 format) (a0-14 0) (a1-4 "ERROR : missing camera-slave parameter to *camera-combiner* start-tracking~%") ) (let ((v1-8 (-> block param 0))) (rtype-of v1-8) ) (t9-3 a0-14 a1-4) ) ) ((not (type? (-> block param 0) camera-slave)) (let ((t9-5 format) (a0-16 0) (a1-6 "ERROR : invalid type '~A' to *camera-combiner* start-tracking~%") (v1-11 (-> block param 0)) ) (t9-5 a0-16 a1-6 (rtype-of v1-11)) ) ) ((zero? (-> self tracking-status)) (set! (-> self tracking-status) (the-as uint 1)) (let ((gp-1 (the-as camera-slave (-> block param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-1 options))) (set! (-> self tracking no-follow) (-> gp-1 tracking no-follow)) (copy-to (-> self tracking tilt-adjust) (-> gp-1 tracking tilt-adjust)) (copy-to (-> self tracking underwater-blend) (-> gp-1 tracking underwater-blend)) (copy-to (-> self tracking point-of-interest-blend) (-> gp-1 tracking point-of-interest-blend)) (let ((gp-2 (-> gp-1 trans))) (cam-calc-follow! (-> self tracking) gp-2 #f) (slave-set-rotation! (-> self tracking) gp-2 (the-as cam-slave-options-u32 (-> self tracking-options)) (-> self fov) #f ) ) ) ) ) ) (('copy-tracking) (cond ((< argc 1) (let ((t9-11 format) (a0-23 0) (a1-12 "ERROR : missing camera-slave parameter to *camera-combiner* copy-tracking~%") ) (let ((v1-23 (-> block param 0))) (rtype-of v1-23) ) (t9-11 a0-23 a1-12) ) ) ((not (type? (-> block param 0) camera-slave)) (let ((t9-13 format) (a0-25 0) (a1-14 "ERROR : invalid type '~A' to *camera-combiner* copy-tracking~%") (v1-25 (-> block param 0)) ) (t9-13 a0-25 a1-14 (rtype-of v1-25)) ) ) ((nonzero? (-> self tracking-status)) #f ) (else (set! (-> self tracking-status) (the-as uint 1)) (let ((gp-3 (the-as camera-slave (-> block param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-3 options))) (set! (-> self tracking no-follow) (-> gp-3 tracking no-follow)) (copy-to (-> self tracking tilt-adjust) (-> gp-3 tracking tilt-adjust)) (copy-to (-> self tracking underwater-blend) (-> gp-3 tracking underwater-blend)) (set! (-> self tracking follow-off quad) (-> gp-3 tracking follow-off quad)) (set! (-> self tracking follow-pt quad) (-> gp-3 tracking follow-pt quad)) (let* ((a2-23 (-> self tracking)) (a3-7 (-> gp-3 tracking)) (v1-37 (-> a3-7 inv-mat quad 0)) (a0-32 (-> a3-7 inv-mat quad 1)) (a1-17 (-> a3-7 inv-mat quad 2)) (a3-8 (-> a3-7 inv-mat trans quad)) ) (set! (-> a2-23 inv-mat quad 0) v1-37) (set! (-> a2-23 inv-mat quad 1) a0-32) (set! (-> a2-23 inv-mat quad 2) a1-17) (set! (-> a2-23 inv-mat trans quad) a3-8) ) (copy-to (-> self tracking point-of-interest-blend) (-> gp-3 tracking point-of-interest-blend)) (set! (-> self tracking looking-at quad) (-> gp-3 tracking looking-at quad)) (set! v0-0 (-> self tracking looking-interesting)) (set! (-> (the-as vector v0-0) quad) (-> gp-3 tracking looking-interesting quad)) ) v0-0 ) ) ) ) ) :code (behavior () (until #f (when *debug-segment* (let ((gp-0 (-> *display* frames (-> *display* on-screen) profile-array data 0)) (v1-7 'camera) (s5-0 *profile-camera-color*) ) (when (and *dproc* *debug-segment*) (let ((s4-0 (-> gp-0 data (-> gp-0 count)))) (let ((s3-0 (-> gp-0 base-time))) (set! (-> s4-0 name) v1-7) (set! (-> s4-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-0)))) ) (set! (-> s4-0 depth) (the-as uint (-> gp-0 depth))) (set! (-> s4-0 color) s5-0) (set! (-> gp-0 segment (-> gp-0 depth)) s4-0) ) (+! (-> gp-0 count) 1) (+! (-> gp-0 depth) 1) (set! (-> gp-0 max-depth) (max (-> gp-0 max-depth) (-> gp-0 depth))) ) ) 0 ) (when (and (not (logtest? (-> *camera* master-options) (cam-master-options-u32 HAVE_TARGET))) (!= (-> self tracking-status) 0) ) (set! (-> self tracking-status) (the-as uint 0)) 0 ) (when *camera* (let ((s5-1 (-> *camera* slave)) (s4-1 (-> *camera* decel)) (f30-0 (parameter-ease-sin-clamp (-> self interp-val))) (gp-1 (new-stack-vector0)) ) (set! (-> gp-1 quad) (-> self trans quad)) (when s5-1 (cond ((< (-> self interp-val) 1.0) (vector-lerp-clamp! (-> self trans) (-> s4-1 0 trans) (-> s5-1 0 trans) f30-0) (set! (-> self fov) (lerp-clamp (-> s4-1 0 fov) (-> s5-1 0 fov) f30-0)) (set! (-> self dist-from-src) (vector-vector-distance (-> self trans) (-> s4-1 0 trans))) (set! (-> self dist-from-dest) (vector-vector-distance (-> self trans) (-> s5-1 0 trans))) (cond ((= (-> self tracking-status) 1) (cam-calc-follow! (-> self tracking) (-> self trans) #t) (slave-set-rotation! (-> self tracking) (-> self trans) (the-as cam-slave-options-u32 (-> self tracking-options)) (-> self fov) (not (-> self fast-rot)) ) (let* ((a2-4 (-> self inv-camera-rot)) (a3-2 (-> self tracking)) (v1-42 (-> a3-2 inv-mat quad 0)) (a0-18 (-> a3-2 inv-mat quad 1)) (a1-8 (-> a3-2 inv-mat quad 2)) (a3-3 (-> a3-2 inv-mat trans quad)) ) (set! (-> a2-4 quad 0) v1-42) (set! (-> a2-4 quad 1) a0-18) (set! (-> a2-4 quad 2) a1-8) (set! (-> a2-4 trans quad) a3-3) ) ) (else (cam-helper-temp s4-1 s5-1 f30-0) ) ) (cond ((and (< 0.0 (-> *camera* outro-t-step)) (< (-> *camera* outro-t) (-> *camera* outro-exit-value))) ) ((and (< (-> *camera* outro-t-step) 0.0) (< (-> *camera* outro-exit-value) (-> *camera* outro-t))) ) ((paused?) ) (else (+! (-> self interp-val) (* (-> self interp-step) (-> self clock time-adjust-ratio))) ) ) ) (else (set! (-> self dist-from-src) 409600.0) (set! (-> self dist-from-dest) 0.0) (set! (-> self trans quad) (-> s5-1 0 trans quad)) (set! (-> self fov) (-> s5-1 0 fov)) (cond ((= (-> self tracking-status) 2) (set! (-> self tracking-status) (the-as uint 1)) ) ((= (-> self tracking-status) 3) (set! (-> self tracking-status) (the-as uint 0)) 0 ) ) (cond ((= (-> self tracking-status) 1) (cam-calc-follow! (-> self tracking) (-> self trans) #t) (slave-set-rotation! (-> self tracking) (-> self trans) (the-as cam-slave-options-u32 (-> self tracking-options)) (-> self fov) (not (-> self fast-rot)) ) (let* ((v1-71 (-> self inv-camera-rot)) (a3-5 (-> self tracking)) (a0-25 (-> a3-5 inv-mat quad 0)) (a1-12 (-> a3-5 inv-mat quad 1)) (a2-8 (-> a3-5 inv-mat quad 2)) (a3-6 (-> a3-5 inv-mat trans quad)) ) (set! (-> v1-71 quad 0) a0-25) (set! (-> v1-71 quad 1) a1-12) (set! (-> v1-71 quad 2) a2-8) (set! (-> v1-71 trans quad) a3-6) ) ) (else (let* ((v1-72 (-> self inv-camera-rot)) (a3-7 (-> s5-1 0 tracking)) (a0-27 (-> a3-7 inv-mat quad 0)) (a1-13 (-> a3-7 inv-mat quad 1)) (a2-9 (-> a3-7 inv-mat quad 2)) (a3-8 (-> a3-7 inv-mat trans quad)) ) (set! (-> v1-72 quad 0) a0-27) (set! (-> v1-72 quad 1) a1-13) (set! (-> v1-72 quad 2) a2-9) (set! (-> v1-72 trans quad) a3-8) ) ) ) ) ) ) (vector-! (-> self velocity) (-> self trans) gp-1) ) ) (when *debug-segment* (let ((gp-2 (-> *display* frames (-> *display* on-screen) profile-array data 0))) (when (and *dproc* *debug-segment*) (let* ((v1-85 (+ (-> gp-2 depth) -1)) (s5-2 (-> gp-2 segment v1-85)) (s4-2 (-> gp-2 base-time)) ) (when (>= v1-85 0) (set! (-> s5-2 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-2)))) (+! (-> gp-2 depth) -1) ) ) ) ) 0 ) (set! (-> self fast-rot) #f) (suspend) ) #f ) ) ;; definition for function cam-combiner-init ;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior cam-combiner-init camera-combiner () (stack-size-set! (-> self main-thread) 512) (vector-reset! (-> self trans)) (matrix-identity! (-> self inv-camera-rot)) (cond (*math-camera* (set! (-> self fov) (-> *math-camera* fov)) (set! (-> self trans quad) (-> *math-camera* trans quad)) (let* ((v1-6 (-> self inv-camera-rot)) (a3-0 (-> *math-camera* inv-camera-rot)) (a0-6 (-> a3-0 quad 0)) (a1-1 (-> a3-0 quad 1)) (a2-0 (-> a3-0 quad 2)) (a3-1 (-> a3-0 trans quad)) ) (set! (-> v1-6 quad 0) a0-6) (set! (-> v1-6 quad 1) a1-1) (set! (-> v1-6 quad 2) a2-0) (set! (-> v1-6 trans quad) a3-1) ) ) (else (set! (-> self fov) 11650.845) ) ) (set! (-> self interp-val) 1.0) (set! (-> self interp-step) 0.125) (set! (-> self tracking-status) (the-as uint 0)) (set! (-> self fast-rot) #f) (init (-> self tracking tilt-adjust) (-> *CAMERA-bank* default-tilt-adjust) 9.102222 91.022224 0.25) (init (-> self tracking follow-height-extra) (-> *setting-control* cam-current extra-follow-height) 81.92 819.2 0.5 ) (vector-reset! (-> self velocity)) (go cam-combiner-active) 0 (none) )