73 lines
2.2 KiB
Haskell
73 lines
2.2 KiB
Haskell
module Types.Util where
|
|
|
|
import qualified Data.Text as T
|
|
|
|
import qualified Data.Map.Strict as M
|
|
|
|
import qualified SDL
|
|
import qualified SDL.Internal.Numbered as SDL (fromNumber)
|
|
import qualified SDL.Raw.Enum as SDLRaw
|
|
|
|
-- internal imports
|
|
|
|
import Types.Subsystems
|
|
|
|
type Progress = (Float, T.Text)
|
|
|
|
type ActionTranslation = M.Map (SDL.Scancode, ActionModifiers) Action
|
|
|
|
data ActionModifiers = ActionModifiers
|
|
{ modLeftShift :: Bool
|
|
, modRightShift :: Bool
|
|
, modLeftCtrl :: Bool
|
|
, modRightCtrl :: Bool
|
|
, modLeftAlt :: Bool
|
|
, modAltGr :: Bool
|
|
, modCapsLock :: Bool
|
|
}
|
|
deriving (Show, Eq, Ord)
|
|
|
|
compareSDLModifiers
|
|
:: ActionModifiers
|
|
-> SDL.KeyModifier
|
|
-> Bool
|
|
compareSDLModifiers mod sdlmod =
|
|
modLeftShift mod == SDL.keyModifierLeftShift sdlmod &&
|
|
modRightShift mod == SDL.keyModifierRightShift sdlmod &&
|
|
modLeftCtrl mod == SDL.keyModifierLeftCtrl sdlmod &&
|
|
modRightCtrl mod == SDL.keyModifierRightCtrl sdlmod &&
|
|
modLeftAlt mod == SDL.keyModifierLeftAlt sdlmod &&
|
|
modAltGr mod == SDL.keyModifierAltGr sdlmod &&
|
|
modCapsLock mod == SDL.keyModifierCapsLock sdlmod
|
|
|
|
translateSDLModifiers
|
|
:: SDL.KeyModifier
|
|
-> ActionModifiers
|
|
translateSDLModifiers sdlmod = ActionModifiers
|
|
{ modLeftShift = SDL.keyModifierLeftShift sdlmod
|
|
, modRightShift = SDL.keyModifierRightShift sdlmod
|
|
, modLeftCtrl = SDL.keyModifierLeftCtrl sdlmod
|
|
, modRightCtrl = SDL.keyModifierRightCtrl sdlmod
|
|
, modLeftAlt = SDL.keyModifierLeftAlt sdlmod
|
|
, modAltGr = SDL.keyModifierAltGr sdlmod
|
|
, modCapsLock = SDL.keyModifierCapsLock sdlmod
|
|
}
|
|
|
|
nonmod = ActionModifiers False False False False False False False
|
|
|
|
defaultTranslation :: ActionTranslation
|
|
defaultTranslation = M.fromList
|
|
[ ((SDL.ScancodeW, nonmod), MoveUp)
|
|
, ((SDL.ScancodeS, nonmod), MoveDown)
|
|
, ((SDL.ScancodeA, nonmod), MoveLeft)
|
|
, ((SDL.ScancodeD, nonmod), MoveRight)
|
|
, ((SDL.ScancodeSpace, nonmod), Jump)
|
|
, ((SDL.ScancodeSpace, nonmod {modLeftShift = True}), JumpDown)
|
|
, ((SDL.ScancodeF, nonmod), Activate)
|
|
, ((SDL.Scancode1, nonmod), ReleasePowerup1)
|
|
, ((SDL.Scancode2, nonmod), ReleasePowerup2)
|
|
, ((SDL.Scancode3, nonmod), ReleasePowerup3)
|
|
, ((SDL.ScancodeLCtrl, nonmod), Spit)
|
|
, ((SDL.ScancodePause, nonmod), Pause)
|
|
]
|