;;-*-Lisp-*-
(in-package goal)

;; name: desert-mood.gc
;; name in dgo: desert-mood
;; dgos: HGA, WIN, DST

;; DECOMP BEGINS

(deftype desert-states (structure)
  ((light     light-state   :inline)
   (flame     flames-state  :inline)
   (bsphere0  vector        :inline)
   (bsphere1  vector        :inline)
   )
  )


(defbehavior update-mood-desert time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int))
  (copy-mood-exterior arg0)
  (when (and (= (-> *level* level arg2 status) 'active)
             (< (the-as uint (-> *time-of-day-context* mode)) (the-as uint 9))
             )
    (-> arg0 state)
    (set! (-> arg0 times 7 w) 1.0)
    (update-mood-flames arg0 5 2 8 0.5 0.0009765625 1.5)
    )
  0
  (none)
  )

(deftype desertg-states (structure)
  ((light    light-state   :inline)
   (flame    flames-state  :inline)
   (bsphere  vector        :inline)
   )
  )


(defun init-mood-desertg ((arg0 mood-context))
  (let ((v1-1 (&-> arg0 state 4)))
    (set! (-> v1-1 0) (the-as uint 8192000.0))
    (set! (-> v1-1 1) (the-as uint 221184.0))
    (set! (-> v1-1 2) (the-as uint 8601600.0))
    (set! (-> v1-1 3) (the-as uint 1.0))
    )
  (let ((v1-2 (-> arg0 light-group 2)))
    (let ((a0-1 (-> v1-2 dir0)))
      (set! (-> a0-1 direction x) 0.0)
      (set! (-> a0-1 direction y) 1.0)
      (set! (-> a0-1 direction z) 0.0)
      (set! (-> a0-1 direction w) 0.0)
      )
    (set-vector! (-> v1-2 dir0 color) 0.8 0.45 0.2 1.0)
    (let ((a0-3 (-> v1-2 dir1)))
      (set! (-> a0-3 direction x) -0.372)
      (set! (-> a0-3 direction y) 0.853)
      (set! (-> a0-3 direction z) 0.363)
      (set! (-> a0-3 direction w) 0.0)
      )
    (set-vector! (-> v1-2 dir1 color) 0.909 0.855 0.82 1.0)
    (set-vector! (-> v1-2 ambi color) 0.627 0.718 1.0 1.0)
    (set! (-> v1-2 dir0 extra x) 1.0)
    (set! (-> v1-2 dir1 extra x) 0.5)
    (set! (-> v1-2 dir2 extra x) 0.0)
    (set! (-> v1-2 ambi extra x) 0.35)
    )
  )

(defbehavior update-mood-desertg time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int))
  (copy-mood-exterior arg0)
  (when (and (= (-> *level* level arg2 status) 'active)
             (< (the-as uint (-> *time-of-day-context* mode)) (the-as uint 9))
             )
    (let ((v1-8 (&-> arg0 state 4)))
      (set! (-> v1-8 0) (the-as uint 8192000.0))
      (set! (-> v1-8 1) (the-as uint 221184.0))
      (set! (-> v1-8 2) (the-as uint 8601600.0))
      (set! (-> v1-8 3) (the-as uint 1.0))
      )
    (let* ((s5-1 (the-as object (-> arg0 state)))
           (f2-0 (vector-vector-distance (target-pos 0) (-> (the-as desert-states s5-1) bsphere0)))
           (f0-5 (- 1.0 (fmax 0.0 (fmin 1.0 (* 0.0000030517579 (+ -737280.0 f2-0))))))
           )
      (set! (-> arg0 times 7 w) 1.0)
      (light-group-lerp!
        (-> arg0 light-group 0)
        (the-as (pointer light-group) (-> arg0 light-group))
        (-> arg0 light-group 2)
        f0-5
        )
      )
    (update-mood-flames arg0 5 2 8 0.5 0.0009765625 1.5)
    )
  0
  (none)
  )

(deftype deswalk-states (structure)
  ((light     light-state   :inline)
   (flame     flames-state  :inline)
   (bsphere0  vector        :inline)
   (bsphere1  vector        :inline)
   )
  )


(defbehavior update-mood-deswalk time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int))
  (copy-mood-exterior arg0)
  (when (and (= (-> *level* level arg2 status) 'active)
             (< (the-as uint (-> *time-of-day-context* mode)) (the-as uint 9))
             )
    (-> arg0 state)
    (let* ((a0-6 (-> *display* part-clock frame-counter))
           (v1-11 (mod a0-6 300))
           )
      (mod a0-6 900)
      (set! (-> arg0 times 5 w) 1.0)
      (set! (-> arg0 times 7 w) 1.0)
      (set! (-> arg0 times 6 w) (+ 0.85 (* 0.35 (sin (* 218.45334 (the float v1-11))))))
      )
    )
  0
  (none)
  )
