1;; Accessors - a drawbridge gob is simply its sprite in the 'on state 2(define (drawbridge-sprite-tag drawbridge) 3 (display "drawbridge-sprite-tag drawbridge:")(display drawbridge)(newline) 4 drawbridge) 5 6;; Extend the bim interface to support the 'signal message 7(define (drawbridge-state on? kobj) 8 (let* ((bim (gob-data (kobj-gob kobj)))) 9 (if on? 10 (state-mk (drawbridge-sprite-tag (bim-members bim)) #f pclass-bridge 0) 11 (state-mk nil #f pclass-none 0)))) 12 13(define drawbridge-ifc 14 (ifc bim-ifc 15 (method 'signal bim-toggle) 16 (method 'state drawbridge-state) 17 )) 18 19;; Make a kernel drawbridge type 20(mk-obj-type 'TF_drawbridge "drawbridge" nil layer-tfeat drawbridge-ifc) 21 22;; Define a constructor 23(define (mk-drawbridge dir) 24 (case dir 25 ((north south) (bind (kern-mk-obj TF_drawbridge 1) 26 (bim-mk #f '() 's_ns_bridge))) 27 (else (bind (kern-mk-obj TF_drawbridge 1) 28 (bim-mk #f '() 's_ew_bridge))))) 29