2018-01-09 17:40:54 +00:00
|
|
|
module Affection.MessageBus.Message.JoystickMessage
|
|
|
|
( JoystickMessage(..)
|
2018-09-25 05:02:33 +00:00
|
|
|
-- | Vector export
|
|
|
|
, Linear.V2
|
2018-01-09 17:40:54 +00:00
|
|
|
-- | SDL exports
|
|
|
|
, SDL.JoyHatPosition
|
|
|
|
, SDL.JoyButtonState
|
|
|
|
, SDL.JoyDeviceConnection
|
|
|
|
-- | Number exports
|
2018-09-25 14:10:36 +00:00
|
|
|
, Word8
|
|
|
|
, Int16
|
|
|
|
, Int32
|
2018-01-09 17:40:54 +00:00
|
|
|
) where
|
|
|
|
|
|
|
|
import Affection.MessageBus.Message.Class
|
|
|
|
|
2018-09-25 14:10:36 +00:00
|
|
|
import Data.Word (Word8)
|
|
|
|
import Data.Int (Int32, Int16)
|
2018-01-09 17:40:54 +00:00
|
|
|
|
|
|
|
import qualified SDL
|
|
|
|
|
|
|
|
import Linear (V2(..))
|
|
|
|
|
2018-09-25 14:10:36 +00:00
|
|
|
-- | Datatype for handling all possible joystick events handed over from sdl2
|
2018-01-09 17:40:54 +00:00
|
|
|
data JoystickMessage
|
2018-09-25 15:12:18 +00:00
|
|
|
-- | Movement of a Joystick axis
|
|
|
|
= MsgJoystickAxis
|
2018-09-25 05:02:33 +00:00
|
|
|
{ msgJAWhen :: Double -- ^ Time of event
|
|
|
|
, msgJAWhich :: Int32 -- ^ Joystick identifier
|
|
|
|
, msgJAAxis :: Word8 -- ^ Axis identifier
|
|
|
|
, msgJAValue :: Int16 -- ^ Axis value
|
2018-01-09 17:40:54 +00:00
|
|
|
}
|
2018-09-25 15:12:18 +00:00
|
|
|
-- | Movement of a joystick ball controller
|
|
|
|
| MsgJoystickBall
|
2018-09-25 05:02:33 +00:00
|
|
|
{ msgJBWhen :: Double -- ^ Time of event
|
|
|
|
, msgJBWhich :: Int32 -- ^ Joystick identifier
|
|
|
|
, msgJBBall :: Word8 -- ^ Ball identifier
|
|
|
|
, msgJBRelMotion :: V2 Int16 -- ^ Motion relative to previous position
|
2018-01-09 17:40:54 +00:00
|
|
|
}
|
2018-09-25 15:12:18 +00:00
|
|
|
-- | Movement of joystick hat controller
|
|
|
|
| MsgJoystickHat
|
|
|
|
{ msgJHWhen :: Double -- ^ Time of event
|
|
|
|
, msgJHWhich :: Int32 -- ^ Joystick identifier
|
|
|
|
, msgJHHat :: Word8 -- ^ Hat identifier
|
|
|
|
, msgJHPosition :: SDL.JoyHatPosition -- ^ New hat position
|
2018-01-09 17:40:54 +00:00
|
|
|
}
|
2018-09-25 15:12:18 +00:00
|
|
|
-- | Joystick button event
|
|
|
|
| MsgJoystickButton
|
|
|
|
{ msgJBWhen :: Double -- ^ Time of event
|
|
|
|
, msgJBWhich :: Int32 -- ^ Joystick identifier
|
|
|
|
, msgJBButton :: Word8 -- ^ Button identifier
|
|
|
|
, msgJBState :: SDL.JoyButtonState -- ^ New Button state
|
2018-01-09 17:40:54 +00:00
|
|
|
}
|
2018-09-25 15:12:18 +00:00
|
|
|
-- | Joystick device event
|
|
|
|
| MsgJoystickDevice
|
|
|
|
{ msgJDWhen :: Double -- ^ Time of event
|
|
|
|
, msgJDWhich :: Int32 -- ^ Joystick identifier
|
|
|
|
, msgJDConnection :: SDL.JoyDeviceConnection -- ^ Connection status
|
2018-01-09 17:40:54 +00:00
|
|
|
}
|
|
|
|
deriving (Show)
|
|
|
|
|
|
|
|
instance Message JoystickMessage where
|
2018-09-25 05:02:33 +00:00
|
|
|
msgTime (MsgJoystickAxis t _ _ _) = t
|
|
|
|
msgTime (MsgJoystickBall t _ _ _) = t
|
|
|
|
msgTime (MsgJoystickHat t _ _ _) = t
|
2018-01-09 17:40:54 +00:00
|
|
|
msgTime (MsgJoystickButton t _ _ _) = t
|
2018-09-25 05:02:33 +00:00
|
|
|
msgTime (MsgJoystickDevice t _ _) = t
|