gloss-examples-1.7.0.1: Visibility/Interface.hs
{-# LANGUAGE PatternGuards #-}
module Interface
( handleInput
, stepState)
where
import State
import qualified Graphics.Gloss.Interface.Pure.Game as G
-- Input ------------------------------------------------------------------------------------------
-- | Handle an input event.
handleInput :: G.Event -> State -> State
handleInput (G.EventKey key keyState _ (x, y)) state
-- move the view position.
| G.MouseButton G.LeftButton <- key
, G.Down <- keyState
= state { stateModeInterface = ModeInterfaceMove
, stateViewPos
= ( fromRational $ toRational x
, fromRational $ toRational y) }
-- set the target position.
| G.MouseButton G.RightButton <- key
, G.Down <- keyState
= state { stateTargetPos
= Just ( fromRational $ toRational x
, fromRational $ toRational y) }
| G.MouseButton G.LeftButton <- key
, G.Up <- keyState
= state { stateModeInterface = ModeInterfaceIdle }
handleInput (G.EventMotion (x, y)) state
| stateModeInterface state == ModeInterfaceMove
= state { stateViewPos
= ( fromRational $ toRational x
, fromRational $ toRational y) }
-- t : Turn target indicator off.
handleInput (G.EventKey key keyState _ _) state
| G.Char 't' <- key
, G.Down <- keyState
= state { stateTargetPos = Nothing }
-- w : Display the whole world.
handleInput (G.EventKey key keyState _ _) state
| G.Char 'w' <- key
, G.Down <- keyState
= state { stateModeDisplay = ModeDisplayWorld }
-- n : Display the normalised world.
handleInput (G.EventKey key keyState _ _) state
| G.Char 'n' <- key
, G.Down <- keyState
= state { stateModeDisplay = ModeDisplayNormalised }
-- a : Toggle approximate visibility
handleInput (G.EventKey key keyState _ _) state
| G.Char 'a' <- key
, G.Down <- keyState
= state { stateModeOverlay
= case stateModeOverlay state of
ModeOverlayVisApprox -> ModeOverlayNone
_ -> ModeOverlayVisApprox }
handleInput _ state
= state
-- Step -------------------------------------------------------------------------------------------
-- | Advance the state one iteration
stepState :: Float -> State -> State
stepState _ state = state