class.scm 905 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
(define-module (class)
  :use-module (oop goops)
  :use-module (util)
  :export (vector-length v3 make-player))

(define-class <v3> ()
  (x #:accessor x #:init-keyword #:x)
  (y #:accessor y #:init-keyword #:y)
  (z #:accessor z #:init-keyword #:z))
(export x y z)

(define* (v3 #:optional (x 0) (y 0) (z 0))
  (make <v3> #:x x #:y y #:z z))

(define-method (+ (v <v3>) (u <v3>))
  (v3 (+ (x v) (x u))
      (+ (y v) (y u))
      (+ (z v) (z u))))

(define-method (* (a <number>) (v <v3>))
  (v3 (* a (x v))
      (* a (y v))
      (* a (z v))))

(define (vector-length v)
  (sqrt (+ (* (x v) (x v))
           (* (y v) (y v))
           (* (z v) (z v)))))

(define-class <player> ()
  (pos #:accessor p #:init-form (v3 1 1))
  (angle #:accessor a #:init-value 0)
  (feild-of-view #:accessor fov #:init-value (/ tau 6)))
(export p a fov)

(define (make-player x y a)
   (make <player> #:x x #:y y #:a a))