(in-package 'USER)

;---------- DEMO STUFF ---------------
;    (hack, hack, hack, hack..)

(defun introduction ()
  (look-left)
  (neutral)
  (speak "I am Gandalf.")
  (out 151 100 20)(out 161 100 20)
  (eye-brows)
  (speak "I am not a human")
  (out 151 100 40)(out 161 100 40) 
  (out 7 100 0)(out 9 100 0)
  (speak "I am not even a car'toon!")
  (eye-brows)
  (out 8 100 10)(out 10 100 10)
  (speak "I am a software robot [ <,200>]")
  (out 7 100 10)(out 9 100 20)
  (out 8 100 50)(out 10 100 50)
  (speak "My actions are controlled")
  (speak "through twenty one parameters.")
  (neutral)
  (speak "I was designed to interact with people.")
  (out 151 100 70)(out 161 100 70)
  (surprise)
  (out 151 100 40)(out 161 100 40)
  (neutral)
;  (speak "Nothing there")
  (speak "Anyway.")
  (look-down)
  (eye-brows)
  (speak "Kris tells me I will soon be able to listen to people.")
  (speak "Perhaps even see them.")
  (eye-brows)
  (speak "I hope that will [biy<400>]")
;  (speak "[eh<300, 130>]")
  (speak "Stimu'lating")
  (eye-brows)
  (speak "That is all.")
  (nod)
  (speak "Thank you.")
  (speak "Goodbye.")
  (neutral)
  (out 171 400 30)
  (look-left)
  )
  
(defun gaze-loop ()
  (let ((in t))
    (out 171 599 30)
    (loop while in do
	  (sleep 2)
;	  (random-gaze)
	  (if (read-char-no-hang) (setf in nil)))
    (introduction)))

(defun init-voice ()
  (speak "[:nr :dv ap 130]"))

(defun look-left ()
  (out 151 100 60)(out 161 100 70))

(defun random-gaze ()
  (let* ((a (- 40 (random 40)))
	 (b (+ 10 a)))
    (out 151 100 a)(out 161 100 b)))

(defun neutral ()
  (out 171 400 0)
  (out 151 100 0)(out 161 100 0)
;  (out 8 100 50)(out 10 100 50)
  (out 1 100 50) (out 2 100 50) (out 3 100 50)
  (out 4 100 50) (out 5 100 50) (out 6 100 50)))
  )

(defun eye-brows ()
  (let ((a (+ (random 70) 10))
	(b (+ (random 70) 10))
	(c (+ (random 70) 10)))
   ; (out 1 100 a)
    (out 2 200 b)
    (out 3 200 c)
   ; (out 4 200 a)
    (out 5 200 b)
    (out 6 200 c)))

(defun nod ()
  (out 170 200 20)(out 170 200 0))

(defun turn ()
  (out 171 20 200)(out 171 0 200))

(defun blink ()
  (out 7 50 0)(out 8 50 0)
  (sleep 0.1)
  (out 7 50 90)(out 8 50 90))


(defun surprise ()
  (out 1 250 60) (out 2 250 20) (out 3 250 40)
  (out 4 250 40) (out 5 250 20) (out 6 250 60))

(defun look-down ()
  (out 150 100 70)(out 160 100 70)
  (sleep 1)
  (out 150 100 50)(out 160 100 50))

(defun look-straight-out ()
  (out 171 100 0)(out 170 100 0))

(defun test-run ()
  (loop while (not (read-char-no-hang)) do
	 (look-down)
	 (surprise)
	 (neutral)
	 (motor-output 0 nil "hello there")
	 (motor-output 0 nil "look at my sync.")
	 (sleep 0.3)
	 ))

(defun no-talk ()
  (loop while (not (read-char-no-hang)) do
	(look-down)
	(surprise)
	(neutral)
	))


;(defun demo-X ()
;  (surprise


