gloss-examples-1.2.0.1: Visibility/State.hs
-- | Game state
module State where
import Graphics.Gloss
import World
-- | The game state.
data State
= State
{ stateWorld :: World
, stateModeInterface :: ModeInterface
, stateModeDisplay :: ModeDisplay
, stateModeOverlay :: ModeOverlay
, stateViewPos :: Point
, stateTargetPos :: Maybe Point }
-- | What mode the interface interaction is in.
data ModeInterface
-- | We're not doing anything inparticular.
= ModeInterfaceIdle
-- | We're moving the view position.
| ModeInterfaceMove
deriving (Show, Eq)
-- | What mode the display is in.
data ModeDisplay
-- | Show the world in rectangular coordinates.
= ModeDisplayWorld
-- | Show the world normalised so the view position is at the origin.
| ModeDisplayNormalised
deriving (Show, Eq)
-- | What overlay to display.
data ModeOverlay
-- | No overlay
= ModeOverlayNone
-- | Brute force, approximate visibility
| ModeOverlayVisApprox
deriving (Show, Eq)
-- | Initial game state.
initialState :: World -> State
initialState world
= State
{ stateWorld = world
, stateModeInterface = ModeInterfaceIdle
, stateModeDisplay = ModeDisplayWorld
, stateModeOverlay = ModeOverlayVisApprox
, stateViewPos = (0, 0)
, stateTargetPos = Nothing }