1 USING: arrays accessors continuations kernel symbols
2 combinators.lib sequences namespaces init vocabs ;
5 SYMBOLS: game-input-backend game-input-opened ;
7 HOOK: (open-game-input) game-input-backend ( -- )
8 HOOK: (close-game-input) game-input-backend ( -- )
9 HOOK: (reset-game-input) game-input-backend ( -- )
11 : game-input-opened? ( -- ? )
12 game-input-opened get ;
16 M: f (reset-game-input) ;
18 : reset-game-input ( -- )
22 : load-game-input-backend ( -- )
23 game-input-backend get
24 [ "game-input.backend" load-vocab drop ] unless ;
26 [ reset-game-input ] "game-input" add-init-hook
30 : open-game-input ( -- )
35 : close-game-input ( -- )
41 : with-game-input ( quot -- )
42 open-game-input [ close-game-input ] [ ] cleanup ;
44 TUPLE: controller handle ;
45 TUPLE: controller-state x y z rx ry rz slider pov buttons ;
47 M: controller-state clone
48 call-next-method dup buttons>> clone >>buttons ;
52 pov-up pov-up-right pov-right pov-down-right
53 pov-down pov-down-left pov-left pov-up-left ;
55 HOOK: get-controllers game-input-backend ( -- sequence )
57 HOOK: product-string game-input-backend ( controller -- string )
58 HOOK: product-id game-input-backend ( controller -- id )
59 HOOK: instance-id game-input-backend ( controller -- id )
61 : find-controller-products ( product-id -- sequence )
62 get-controllers [ product-id = ] with filter ;
63 : find-controller-instance ( product-id instance-id -- controller/f )
66 [ instance-id = ] bi, bi* and
69 HOOK: read-controller game-input-backend ( controller -- controller-state )
70 HOOK: calibrate-controller game-input-backend ( controller -- )
72 TUPLE: keyboard-state keys ;
74 M: keyboard-state clone
75 call-next-method dup keys>> clone >>keys ;
77 HOOK: read-keyboard game-input-backend ( -- keyboard-state )
79 load-game-input-backend