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