pituicat/src/Types/Util.hs

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)
]