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

;; name: vehicle-physics.gc
;; name in dgo: vehicle-physics
;; dgos: HGA, LPATK, RAILA, LFACCAR, CWI, WASALL, LFACTORY, COMBA

;; DECOMP BEGINS

(defmethod vehicle-method-95 ((this vehicle) (arg0 vector) (arg1 float))
  (let ((f0-1 (- (-> arg0 y) (-> arg0 w))))
    (when (< f0-1 (-> this water-height))
      (let ((s5-0 (new 'stack-no-clear 'matrix)))
        (vector-copy! (-> s5-0 rvec) arg0)
        (let ((s3-0 (-> this info))
              (f1-3 (fmin (-> this water-height) (+ (-> arg0 y) (-> arg0 w))))
              )
          0.0
          (let* ((f2-4 (fmax -1.0 (fmin 1.0 (/ (- (-> this water-height) (-> arg0 y)) (-> arg0 w)))))
                 (f30-0 (+ 0.5 (* (/ f2-4 -4) f2-4 f2-4) (* 0.75 f2-4)))
                 )
            (set! (-> s5-0 rvec y) (* 0.5 (+ f0-1 f1-3)))
            (rigid-body-control-method-23 (-> this rbody) (-> s5-0 rvec) (-> s5-0 fvec))
            (let* ((f0-8
                     (* 0.025132721 (vector-length (-> s5-0 fvec)) (-> s3-0 handling water-drag-factor) (-> s3-0 info mass) f30-0)
                     )
                   (f1-7 (-> arg0 w))
                   (f0-9 (* f0-8 (* f1-7 f1-7)))
                   (f1-10 68719480000.0)
                   (f0-11 (fmin (* f0-9 (/ 1.0 f1-10)) (* 0.125 (/ 1.0 arg1) (-> s3-0 info mass))))
                   )
              (vector-float*! (-> s5-0 uvec) (-> s5-0 fvec) (* -1.0 f0-11))
              )
            (apply-impact! (-> this rbody) (-> s5-0 rvec) (-> s5-0 uvec))
            (vector-reset! (-> s5-0 uvec))
            (let ((f0-18 (* 514718.12 (-> s3-0 handling buoyancy-factor) f30-0 (-> arg0 w) (-> arg0 w) (-> arg0 w)))
                  (f1-21 68719480000.0)
                  )
              (set! (-> s5-0 uvec y) (* f0-18 (/ 1.0 f1-21)))
              )
            )
          )
        (apply-impact! (-> this rbody) (-> s5-0 rvec) (-> s5-0 uvec))
        )
      )
    )
  0
  (none)
  )

(defmethod vehicle-method-96 ((this vehicle) (arg0 float))
  (let ((s4-0 (-> this root root-prim))
        (s3-0 1)
        )
    (when (< (-> this rbody position y) (+ (-> this water-height) (-> s4-0 local-sphere w)))
      (when (zero? (-> s4-0 prim-core prim-type))
        (let ((v1-5 s4-0))
          (set! s4-0 (-> (the-as collide-shape-prim-group v1-5) child 0))
          (set! s3-0 (the-as int (-> v1-5 specific 0)))
          )
        )
      (while (nonzero? s3-0)
        (+! s3-0 -1)
        (when (= (-> s4-0 prim-core prim-type) -1)
          (let ((a1-1 (-> s4-0 prim-core)))
            (if (< (- (-> a1-1 world-sphere y) (-> a1-1 world-sphere w)) (-> this water-height))
                (vehicle-method-95 this (-> a1-1 world-sphere) arg0)
                )
            )
          )
        (&+! s4-0 80)
        )
      )
    )
  0
  (none)
  )

(defmethod apply-gravity ((this vehicle) (arg0 float))
  (apply-gravity! this arg0)
  (none)
  )

(defmethod apply-gravity1 ((this vehicle) (arg0 float))
  (apply-gravity! this arg0)
  (none)
  )
