game.input.*: factor out callback implementations to separate words so they optimize

db4
Joe Groff 2010-03-01 23:29:26 -08:00
parent 1c08fde381
commit 4159cfcc7b
2 changed files with 45 additions and 40 deletions

View File

@ -92,8 +92,7 @@ SYMBOLS: +dinput+ +keyboard-device+ +keyboard-state+
+dinput+ get swap device-guid +dinput+ get swap device-guid
IDirectInput8W::GetDeviceStatus S_OK = ; IDirectInput8W::GetDeviceStatus S_OK = ;
: find-device-axes-callback ( -- alien ) : (find-device-axes-callback) ( lpddoi pvRef -- BOOL )
[ ! ( lpddoi pvRef -- BOOL )
+controller-devices+ get at +controller-devices+ get at
swap guidType>> { swap guidType>> {
{ [ dup GUID_XAxis = ] [ drop 0.0 >>x ] } { [ dup GUID_XAxis = ] [ drop 0.0 >>x ] }
@ -105,8 +104,10 @@ SYMBOLS: +dinput+ +keyboard-device+ +keyboard-state+
{ [ dup GUID_Slider = ] [ drop 0.0 >>slider ] } { [ dup GUID_Slider = ] [ drop 0.0 >>slider ] }
[ drop ] [ drop ]
} cond drop } cond drop
DIENUM_CONTINUE DIENUM_CONTINUE ;
] LPDIENUMDEVICEOBJECTSCALLBACKW ;
: find-device-axes-callback ( -- alien )
[ (find-device-axes-callback) ] LPDIENUMDEVICEOBJECTSCALLBACKW ;
: find-device-axes ( device controller-state -- controller-state ) : find-device-axes ( device controller-state -- controller-state )
swap [ +controller-devices+ get set-at ] 2keep swap [ +controller-devices+ get set-at ] 2keep
@ -139,11 +140,12 @@ SYMBOLS: +dinput+ +keyboard-device+ +keyboard-state+
[ device-guid +controller-guids+ get delete-at ] [ device-guid +controller-guids+ get delete-at ]
[ com-release ] tri ; [ com-release ] tri ;
: find-controller-callback ( -- alien ) : (find-controller-callback) ( lpddi pvRef -- BOOL )
[ ! ( lpddi pvRef -- BOOL )
drop guidInstance>> add-controller drop guidInstance>> add-controller
DIENUM_CONTINUE DIENUM_CONTINUE ;
] LPDIENUMDEVICESCALLBACKW ; inline
: find-controller-callback ( -- alien )
[ (find-controller-callback) ] LPDIENUMDEVICESCALLBACKW ;
: find-controllers ( -- ) : find-controllers ( -- )
+dinput+ get DI8DEVCLASS_GAMECTRL find-controller-callback +dinput+ get DI8DEVCLASS_GAMECTRL find-controller-callback

View File

@ -251,33 +251,36 @@ M: iokit-game-input-backend reset-mouse
2dup length > 2dup length >
[ set-length ] [ 2drop ] if ; [ set-length ] [ 2drop ] if ;
: device-matched-callback ( -- alien ) :: (device-matched-callback) ( context result sender device -- )
[| context result sender device |
{ {
{ [ device mouse-device? ] [ device ?add-mouse-buttons ] }
{ [ device controller-device? ] [ { [ device controller-device? ] [
device <device-controller-state> device <device-controller-state>
device +controller-states+ get set-at device +controller-states+ get set-at
] } ] }
{ [ device mouse-device? ] [ device ?add-mouse-buttons ] }
[ ] [ ]
} cond } cond ;
] IOHIDDeviceCallback ;
: device-matched-callback ( -- alien )
[ (device-matched-callback) ] IOHIDDeviceCallback ;
:: (device-removed-callback) ( context result sender device -- )
device +controller-states+ get delete-at ;
: device-removed-callback ( -- alien ) : device-removed-callback ( -- alien )
[| context result sender device | [ (device-removed-callback) ] IOHIDDeviceCallback ;
device +controller-states+ get delete-at
] IOHIDDeviceCallback ;
: device-input-callback ( -- alien ) :: (device-input-callback) ( context result sender value -- )
[| context result sender value |
{ {
{ [ sender mouse-device? ] [ +mouse-state+ get value record-mouse ] }
{ [ sender controller-device? ] [ { [ sender controller-device? ] [
sender +controller-states+ get at value record-controller sender +controller-states+ get at value record-controller
] } ] }
{ [ sender mouse-device? ] [ +mouse-state+ get value record-mouse ] }
[ +keyboard-state+ get value record-keyboard ] [ +keyboard-state+ get value record-keyboard ]
} cond } cond ;
] IOHIDValueCallback ;
: device-input-callback ( -- alien )
[ (device-input-callback) ] IOHIDValueCallback ;
: initialize-variables ( manager -- ) : initialize-variables ( manager -- )
+hid-manager+ set-global +hid-manager+ set-global