packages feed

gloss-examples-1.9.3.1: picture/Occlusion/State.hs

{-# LANGUAGE PatternGuards #-}

module State where
import World
import Graphics.Gloss.Interface.Pure.Game

-- | The game state.
data State
        = State
        { stateWorld            :: World
        , stateLineStart        :: Point
        , stateLineEnd          :: Point }


-- | Initial game state.
initState world
        = State
        { stateWorld            = world
        , stateLineStart        = (10, 10)
        , stateLineEnd          = (10, 10) }
        

-- | Handle an input event.
handleInput :: World -> Event -> State -> State
handleInput world (EventKey key keyState mods pos) state
        | MouseButton LeftButton        <- key
        , Down                          <- keyState
        , shift mods == Down    
        = state { stateLineEnd = worldPosOfWindowPos world pos }

        | MouseButton LeftButton        <- key
        , Down                          <- keyState
        = state { stateLineStart        = worldPosOfWindowPos world pos 
                , stateLineEnd          = worldPosOfWindowPos world pos }

        | MouseButton RightButton       <- key
        , Down                          <- keyState
        = state { stateLineEnd          = worldPosOfWindowPos world pos }

handleInput _ _ state
        = state