edge-0.8: Input.hs
module Input where
import Universe
import Graphics.Gloss.Interface.IO.Game
import Lance
handleInput :: Event -> Universe -> IO Universe
handleInput (EventKey (Char ':') Down Modifiers { shift = Down
, ctrl = Down
, alt = Down
} _) u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ godMode = True } } }
handleInput (EventKey (Char '"') Down Modifiers { shift = Down
, ctrl = Down
, alt = Down
} _) u
= return u { skipLevel = True }
--- two-hand keys ---
handleInput (EventKey (SpecialKey KeyLeft) Down _ _) u
= ccwThrusters u
handleInput (EventKey (SpecialKey KeyLeft) Up _ _) u
= stabilizeThrusters u
handleInput (EventKey (SpecialKey KeyRight) Down _ _) u
= cwThrusters u
handleInput (EventKey (SpecialKey KeyRight) Up _ _) u
= stabilizeThrusters u
handleInput (EventKey (SpecialKey KeyUp) Down _ _) u
= activateForwardThrusters u
handleInput (EventKey (SpecialKey KeyUp) Up _ _) u
= deactivateForwardThrusters u
handleInput (EventKey (SpecialKey KeySpace) Down _ _) u
= activateDeflector u
handleInput (EventKey (SpecialKey KeySpace) Up _ _) u
= deactivateDeflector u
handleInput (EventKey (Char 'a') Down _ _) u
= setFireTrigger u
handleInput (EventKey (Char 'a') Up _ _) u
= releaseFireTrigger u
handleInput (EventKey (SpecialKey KeyTab) Down _ _) u
= switchWeapon u
--------------------- keypad keys
handleInput (EventKey (Char '4') Down _ _) u
= ccwThrusters u
handleInput (EventKey (Char '4') Up _ _) u
= stabilizeThrusters u
handleInput (EventKey (Char '6') Down _ _) u
= cwThrusters u
handleInput (EventKey (Char '6') Up _ _) u
= stabilizeThrusters u
handleInput (EventKey (Char '8') Down _ _) u
= activateForwardThrusters u
handleInput (EventKey (Char '8') Up _ _) u
= deactivateForwardThrusters u
handleInput (EventKey (Char '0') Down _ _) u
= setFireTrigger u
handleInput (EventKey (Char '0') Up _ _) u
= releaseFireTrigger u
handleInput (EventKey (SpecialKey KeyEnter) Down _ _) u
= activateDeflector u
handleInput (EventKey (SpecialKey KeyEnter) Up _ _) u
= deactivateDeflector u
handleInput (EventKey (Char '5') Down _ _) u
= switchWeapon u
handleInput _ u = return u
setFireTrigger u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ fireTrigger = True } } }
releaseFireTrigger u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ fireTrigger = False } } }
activateDeflector u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ deflector = True } } }
deactivateDeflector u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ deflector = False } } }
ccwThrusters u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ rotationalThrusters = CCW } } }
stabilizeThrusters u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ rotationalThrusters = Stable } } }
cwThrusters u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ rotationalThrusters = CW } } }
activateForwardThrusters u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ linearThrusters = True } } }
deactivateForwardThrusters u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just l
{ linearThrusters = False } } }
switchWeapon u
= let a = arena u in
let mL = lance a in
case mL of
Nothing -> return u
Just l -> return u { arena = a
{ lance = Just (changeCurrentWeapon l) }
}