jak-project/goal_src/jak1/engine/ui/hud.gc
ManDude edbc7af256
make aux list not get cleared when game is paused (#1673)
* make aux list not get cleared when game is paused

* remove unnecessary hud hack
2022-07-17 20:16:41 -04:00

520 lines
15 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: hud.gc
;; name in dgo: hud
;; dgos: GAME, ENGINE
;; DECOMP BEGINS
(defmethod relocate hud ((obj hud) (arg0 int))
(dotimes (v1-0 (-> obj nb-of-particles))
(if (nonzero? (-> obj particles v1-0 part))
(&+! (-> obj particles v1-0 part) arg0)
)
)
(the-as hud ((method-of-type process relocate) obj arg0))
)
(defmethod deactivate hud ((obj hud))
(dotimes (v1-0 9)
(if (and (-> *hud-parts* parts v1-0) (= (ppointer->process (-> *hud-parts* parts v1-0)) obj))
(set! (-> *hud-parts* parts v1-0) (the-as (pointer hud) #f))
)
)
(dotimes (s5-0 (-> obj nb-of-particles))
(kill-and-free-particles (-> obj particles s5-0 part))
(set! (-> obj particles s5-0 part matrix) -1)
)
((method-of-type process deactivate) obj)
(none)
)
(defmethod draw-hud hud ((obj hud))
(when (and (not (hidden? obj)) (not (paused?)))
(dotimes (s5-0 (-> obj nb-of-particles))
(when (!= s5-0 (-> obj skip-particle))
(if (or (!= (-> obj particles 0 pos x) 0.0) (!= (-> obj particles 0 pos y) 0.0))
(spawn (-> obj particles s5-0 part) *null-vector*)
)
)
)
)
0
(none)
)
(defmethod tally-value hud ((obj hud) (arg0 int) (arg1 int))
(if (= arg0 (-> obj target-value))
(set! (-> obj last-target-equal-time) (-> *display* base-frame-counter))
)
(when (and (not *progress-process*)
(and (!= (-> obj last-hide-time) (-> *display* base-frame-counter))
(not (movie?))
(>= (- (-> *display* base-frame-counter) (-> *game-info* letterbox-time)) (seconds 0.1))
(>= (- (-> *display* base-frame-counter) (-> *game-info* blackout-time)) (seconds 0.1))
(not (and *target* (logtest? (-> *target* state-flags) (state-flags grabbed))))
)
)
(when (or (!= (-> obj value) arg0)
(!= (-> obj value2) arg1)
(-> obj force-on-screen)
(or (and (cpad-hold? 0 l2) (not (-> obj disable)))
(and (not *cheat-mode*) (cpad-hold? 0 r2))
(-> obj first-init)
)
)
(cond
((and (-> obj increment-on-event)
(< (-> obj value) arg0)
(not (-> obj first-init))
(< (- (-> *display* base-frame-counter) (-> obj last-target-equal-time)) (seconds 1.5))
)
(when (and (!= (-> obj value) (-> obj target-value))
(>= (- (-> *display* base-frame-counter) (-> obj last-increment-time)) (seconds 0.1))
)
(sound-play "cursor-options")
(+! (-> obj value) 1)
(set! (-> obj last-increment-time) (-> *display* base-frame-counter))
)
)
(else
(if (not (and (not (-> obj first-init))
(>= (- (-> *display* base-frame-counter) (-> obj last-target-equal-time)) (seconds 1.5))
)
)
(set! (-> obj value) arg0)
)
(set! (-> obj target-value) arg0)
(set! (-> obj last-target-equal-time) (-> *display* base-frame-counter))
)
)
(set! (-> obj value2) arg1)
(when (and (not (movie?)) (= *master-mode* 'game) (not (-> obj first-init)) (not (-> obj disable)))
(if (>= (-> obj friend) 0)
(send-event (ppointer->process (-> *hud-parts* parts (-> obj friend))) 'show)
)
(go hud-arriving)
)
(set! (-> obj trigger-time) (-> *display* base-frame-counter))
(set! (-> obj first-init) #f)
)
)
0
(none)
)
(defmethod draw-icons hud ((obj hud))
(dotimes (v1-0 (-> obj nb-of-icons))
(set-vector!
(-> obj icons v1-0 icon 0 root scale)
(* (-> obj icons v1-0 scale-x) (-> *video-parms* relative-x-scale))
(* (-> obj icons v1-0 scale-y) (-> *video-parms* relative-y-scale))
(* (-> obj icons v1-0 scale-x) (-> *video-parms* relative-x-scale))
1.0
)
(set! (-> obj icons v1-0 icon 0 root trans x)
(the float (+ (-> obj icons v1-0 icon-x) -256 (* (-> obj x-sgn) (-> obj offset))))
)
(set! (-> obj icons v1-0 icon 0 root trans y)
(- (+ (the float (-> obj icons v1-0 icon-y))
(* (the float (-> obj y-sgn))
(the float (-> obj offset))
(-> *video-parms* relative-y-scale)
(-> *video-parms* relative-y-scale)
)
(* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical))
)
(the float (-> *video-parms* screen-sy))
)
)
)
0
(none)
)
(defmethod draw-particles hud ((obj hud))
(dotimes (s5-0 (-> obj nb-of-particles))
(when (!= (-> obj skip-particle) -2)
(set! (-> obj particles s5-0 pos x)
(+ -256.0 (the float (* (-> obj x-sgn) (-> obj offset))) (-> obj particles s5-0 init-pos x))
)
(set! (-> obj particles s5-0 pos y)
(* 0.5 (- (* (-> *video-parms* relative-y-scale)
(+ (-> obj particles s5-0 init-pos y)
(the float (* (-> obj y-sgn) (-> obj offset)))
(#if PC_PORT
(if (not (-> *pc-settings* use-vis?))
(* (the float (-> obj y-offset)) (-> *video-parms* relative-y-scale))
(* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical))
)
(* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical))
)
)
)
(the float (-> *video-parms* screen-sy))
)
)
)
(set! (-> obj particles s5-0 pos z) (-> obj particles s5-0 init-pos z))
)
(if (> (-> obj particles s5-0 part matrix) 0)
(set-vector!
(sprite-get-user-hvdf (-> obj particles s5-0 part matrix))
(the float (+ (the int (-> obj particles s5-0 pos x)) 2048))
(the float (+ (the int (-> obj particles s5-0 pos y)) 2048))
(- (-> *math-camera* hvdf-off z) (* 1024.0 (-> obj particles s5-0 pos z)))
(-> *math-camera* hvdf-off w)
)
)
)
0
(none)
)
(defmethod hud-update hud ((obj hud))
0
(none)
)
(defmethod init-particles! hud ((obj hud) (arg0 int))
0
(none)
)
(defmethod get-icon-pos-x hud ((obj hud))
0
)
(defmethod get-icon-pos-y hud ((obj hud))
0
)
(defmethod get-icon-scale-x hud ((obj hud))
0.0
)
(defmethod get-icon-scale-y hud ((obj hud))
0.0
)
(defmethod set-pos-and-scale hud ((obj hud) (arg0 symbol) (arg1 symbol))
0
(none)
)
(defmethod hidden? hud ((obj hud))
(= (-> obj next-state name) 'hud-hidden)
)
(defstate hud-hidden (hud)
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(local-vars (v0-0 object))
(case arg2
(('show)
(if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter)))
(go hud-arriving)
)
)
(('hide)
(set! v0-0 (-> *display* base-frame-counter))
(set! (-> self last-hide-time) (the-as time-frame v0-0))
v0-0
)
(('hide-quick)
(set! v0-0 (-> *display* base-frame-counter))
(set! (-> self last-hide-time) (the-as time-frame v0-0))
v0-0
)
(('increment)
(set! v0-0 (+ (-> self target-value) 1))
(set! (-> self target-value) (the-as int v0-0))
v0-0
)
(('sync)
(set! v0-0 #t)
(set! (-> self first-init) (the-as symbol v0-0))
v0-0
)
(('disable)
(set! v0-0 #t)
(set! (-> self disable) (the-as symbol v0-0))
v0-0
)
(('enable)
(set! (-> self disable) #f)
#f
)
)
)
:enter (behavior ()
(set! (-> self offset) 128)
(draw-icons self)
(draw-particles self)
(let ((gp-0 (-> self child)))
(while gp-0
(send-event (ppointer->process gp-0) 'draw #f)
(set! gp-0 (-> gp-0 0 brother))
)
)
(dotimes (gp-1 (-> self nb-of-particles))
(kill-and-free-particles (-> self particles gp-1 part))
(set! (-> self particles gp-1 part matrix) -1)
)
(none)
)
:exit (behavior ()
(set! (-> self y-offset) (-> self next-y-offset))
(none)
)
:code (behavior ()
(logior! (-> self mask) (process-mask sleep-code))
(loop
(suspend)
)
(none)
)
:post (behavior ()
(if (-> self deactivate-when-hidden)
(deactivate self)
)
(hud-update self)
(none)
)
)
(defstate hud-arriving (hud)
:event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(local-vars (v0-3 object))
(case arg2
(('hide-quick)
(set! (-> self last-hide-time) (-> *display* base-frame-counter))
(set! (-> self force-on-screen) #f)
(set! (-> self offset) 128)
(draw-particles self)
(draw-icons self)
(hud-update self)
(go hud-hidden)
)
(('hide)
(set! (-> self last-hide-time) (-> *display* base-frame-counter))
(set! (-> self force-on-screen) #f)
(go hud-leaving 10)
)
(('show)
(if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter)))
(go hud-arriving)
)
)
(('increment)
(set! v0-3 (+ (-> self target-value) 1))
(set! (-> self target-value) (the-as int v0-3))
v0-3
)
(('sync)
(set! v0-3 #t)
(set! (-> self first-init) (the-as symbol v0-3))
v0-3
)
(('disable)
(set! v0-3 #t)
(set! (-> self disable) (the-as symbol v0-3))
v0-3
)
(('enable)
(set! (-> self disable) #f)
#f
)
)
)
:enter (behavior ()
(let ((gp-0 (-> self child)))
(while gp-0
(send-event (ppointer->process gp-0) 'draw #t)
(set! gp-0 (-> gp-0 0 brother))
)
)
(dotimes (gp-1 (-> self nb-of-particles))
(if (= (-> self particles gp-1 part matrix) -1)
(set! (-> self particles gp-1 part matrix) (sprite-allocate-user-hvdf))
)
)
(none)
)
:code (behavior ()
(loop
(if (not (paused?))
(seekl! (-> self offset) 0 (the int (* 15.0 (-> *display* time-adjust-ratio))))
)
(draw-icons self)
(if (<= (-> self offset) 0)
(go hud-in)
)
(when (movie?)
(set! (-> self last-hide-time) (-> *display* base-frame-counter))
(set! (-> self force-on-screen) #f)
(set! (-> self offset) 128)
(draw-particles self)
(draw-icons self)
(hud-update self)
(go hud-hidden)
)
(suspend)
)
(none)
)
:post (behavior ()
(hud-update self)
(draw-particles self)
(draw-hud self)
(none)
)
)
(defstate hud-in (hud)
:event (-> hud-arriving event)
:code (behavior ()
(set! (-> self trigger-time) (-> *display* base-frame-counter))
(while (and (< (- (-> *display* base-frame-counter) (-> self trigger-time)) (seconds 2)) (not (movie?)))
(set! (-> self offset) 0)
(draw-icons self)
(suspend)
)
(when (movie?)
(set! (-> self last-hide-time) (-> *display* base-frame-counter))
(set! (-> self force-on-screen) #f)
(set! (-> self offset) 128)
(draw-particles self)
(draw-icons self)
(hud-update self)
(go hud-hidden)
)
(go hud-leaving 5)
(none)
)
:post (-> hud-arriving post)
)
(defstate hud-leaving (hud)
:event (-> hud-arriving event)
:code (behavior ((arg0 int))
(loop
(if (not (paused?))
(seekl! (-> self offset) 128 (the int (* (the float arg0) (-> *display* time-adjust-ratio))))
)
(draw-icons self)
(when (movie?)
(set! (-> self last-hide-time) (-> *display* base-frame-counter))
(set! (-> self force-on-screen) #f)
(set! (-> self offset) 128)
(draw-particles self)
(draw-icons self)
(hud-update self)
(go hud-hidden)
)
(if (>= (-> self offset) 128)
(go hud-hidden)
)
(suspend)
)
(none)
)
:post (-> hud-arriving post)
)
(defbehavior hud-init-by-other hud ((arg0 int))
(set! (-> self nb-of-icons) 0)
(set! (-> self nb-of-particles) 0)
(set! (-> self max-nb-of-particles) 7)
(set! (-> self first-init) #t)
(set! (-> self friend) -1)
(set! (-> self last-increment-time) (-> *display* base-frame-counter))
(set! (-> self last-target-equal-time) (-> *display* base-frame-counter))
(set! (-> self increment-on-event) #f)
(set! (-> self skip-particle) -1)
(set! (-> self disable) #f)
(set! (-> self force-on-screen) #f)
(set! (-> self deactivate-when-hidden) #f)
(set! (-> self y-offset) 0)
(set! (-> self next-y-offset) 0)
(set! (-> self last-hide-time) (-> *display* base-frame-counter))
(logior! (-> self mask) (process-mask menu))
(logclear! (-> self mask) (process-mask pause progress))
(init-particles! self arg0)
(draw-icons self)
(draw-particles self)
(go hud-hidden)
(none)
)
(defun send-hud-increment-event ((arg0 hud))
(if (-> arg0 increment-on-event)
(send-event arg0 'increment)
)
)
(defstate hud-collecting (process-drawable)
:trans (behavior ()
(case (-> self type)
((fuel-cell)
(fuel-cell-animate)
)
)
(none)
)
:code (behavior ((arg0 handle))
(let ((s5-0 (new 'stack-no-clear 'vector)))
(let ((s4-0 (handle->process arg0)))
(set! (-> s5-0 x) (- (the float (+ (get-icon-pos-x (the-as hud s4-0)) -256)) (-> self root trans x)))
(set! (-> s5-0 y)
(- (the float (- (get-icon-pos-y (the-as hud s4-0)) (-> *video-parms* screen-sy))) (-> self root trans y))
)
)
(let ((f30-0 4.0)
(f26-0 0.0)
(f28-0 (-> self root scale x))
(f24-0 (-> self root scale y))
(f22-0 (-> self root scale z))
)
(loop
(let ((f0-7 (* f30-0 (-> *display* seconds-per-frame))))
(+! f26-0 f0-7)
(when (< 1.0 f26-0)
(let ((f0-8 (- f26-0 f0-7)))
(set! f0-7 (- 1.0 f0-8))
)
(set! f26-0 1.0)
)
(+! (-> self root trans x) (* f0-7 (-> s5-0 x)))
(+! (-> self root trans y) (* f0-7 (-> s5-0 y)))
)
(set-vector!
(-> self root scale)
(* f28-0 (-> *video-parms* relative-x-scale))
(* f24-0 (-> *video-parms* relative-y-scale) (-> *video-parms* relative-y-scale))
(* f22-0 (-> *video-parms* relative-x-scale))
1.0
)
(let ((a0-12 (-> self root)))
(set-yaw-angle-clear-roll-pitch!
a0-12
(- (y-angle a0-12) (* 182.04445 (* 8.0 (-> *display* time-adjust-ratio))))
)
)
(suspend)
(when (>= f26-0 1.0)
(send-hud-increment-event (the-as hud (handle->process arg0)))
(deactivate self)
)
)
)
)
(none)
)
:post ja-post
)