hexmino-0.1.0.0: src/Selection.hs
module Selection where
import qualified Tile
import qualified Graphics.Gloss.Data.Picture as Pict
-- a selection is a tile that is currently controlled by the user
data Selection = Selection {tile :: Tile.Tile, rotation :: Maybe Float}
-- creation
make :: Tile.Tile -> Selection
make t = Selection {tile = t, rotation = Nothing}
-- rendering
render :: Selection -> Pict.Picture
render sel = case rotation sel of
Just rot -> Tile.renderRotated rot $ tile sel
_ -> Tile.render $ tile sel
-- manupulation functions
rotate :: Selection -> Selection
rotate sel = sel {rotation = Just 0} -- only starts the rotation, needs to be stepped
moveTo :: Pict.Point -> Selection -> Selection
moveTo pos sel = sel {tile = Tile.moveTo pos $ tile sel}
-- stepping
step :: Float -> Selection -> Selection
step secs sel = case rotation sel of
Just rot -> let newRot = rot + secs * 1200 in if newRot >= 120 then
sel {tile = Tile.rotate $ tile sel, rotation = Nothing}
else sel {rotation = Just newRot}
_ -> sel