packages feed

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 }