(use goo)

(use demos/archogen/ldraw)

(dv current-file #f)

(dv cur-x 0)
(dv cur-y 0)
(dv cur-z 0)
(dv cur-rot 90)
(dv pen-is-down #t)
(dv cur-color 0)

(dv scale-factor-x 10)
(dv scale-factor-y 10)
(dv scale-factor-z 24)

(df set-logo-file (file)
  (set current-file file)
  )

(df deg-to-rad (deg)
  (def fdeg (as <flo> deg))
  (* $pi (/ fdeg 180.0))
  )

(df fd (dist|<int>)
  (msg out "Moving forward from %=, %=. (%=) \n" cur-x cur-y cur-rot)
  (msg out "Cos is %=\n" (cos (deg-to-rad cur-rot)))
  (msg out "Sin is %=\n" (sin (deg-to-rad cur-rot)))
  (set cur-x (+ cur-x (round (* (cos (deg-to-rad cur-rot)) (- dist 1)))))
  (set cur-y (+ cur-y (round (* (sin (deg-to-rad cur-rot)) (- dist 1)))))
  (msg out "  Halfway: %=, %=\n" cur-x cur-y)
  (when pen-is-down
    (render-part current-file
                 1
                 dist
                 (* cur-x scale-factor-x)
                 (* cur-z scale-factor-z)
                 (* cur-y scale-factor-y)
                 cur-rot
                 cur-color
                 )
    )
  (set cur-x (+ cur-x (round (* (cos (deg-to-rad cur-rot)) (- dist 1)))))
  (set cur-y (+ cur-y (round (* (sin (deg-to-rad cur-rot)) (- dist 1)))))
  (msg out "  All the way: %=, %=\n" cur-x cur-y)
  )

(df bk (dist|<int>)
  )


(df cl (cname|<str>)
  (set cur-color (find-lcolor cname))
  )

(df fix-rot ()
  (when (< cur-rot 0)
    (set cur-rot (+ cur-rot 360))
    )
  (when (>= cur-rot 360)
    (set cur-rot (- cur-rot 360))
    )
  )

(df rt (deg|<int>)
  (set cur-rot (- cur-rot deg))
  (fix-rot)
  )

(df lt (deg|<int>)
  (set cur-rot (+ cur-rot deg))
  (fix-rot)
  )

(df up ()
  (set cur-z (- cur-z 1))
  )

(df dn ()
  (set cur-z (+ cur-z 1))
  )

(df pu ()
  (set pen-is-down #f)
  )

(df pd ()
  (set pen-is-down #t)
  )
 
(export
  set-logo-file
  fd
  bk
  cl
  rt
  lt
  up
  dn
  pu
  pd
  )