packages feed

4Blocks-0.2: Interface/OnePlayerModeWindow.hs

module Interface.OnePlayerModeWindow ( onePlayerMode )

where

import Core.Game
import Core.Commands
import Rendering.Engine
import Interface.CommandKeys
import Interface.WindowUpdate

import Random
import Control.Monad.State
import Control.Concurrent
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.Events
import qualified Data.Set as Set; import Data.Set (Set)
import Data.IORef;

------------------------------------------------------------------------------------------------------ 
-- Setup one player mode
onePlayerMode :: DrawingArea -> Window -> IO ()
onePlayerMode canvas window
  = do -- ioref for set of keys pressed
       keysIORef <- newIORef (Set.empty)
       
       -- get global random seed
       seed <- newStdGen
       
       -- mutable variable for game state
       gameMVar <- newMVar $ standardRandomGame seed
       
       -- gravity delay loop
       updateWindowWithGravityDelay canvas gameMVar
       
       drawin <- widgetGetDrawWindow canvas
       
       onExpose canvas (\x -> do game <- readMVar gameMVar
                                 renderWithDrawable drawin $ renderOnePlayerScreen game
                                 return (eventSent x))
           
       -- Shift Left Brick
       setupCommandKeyShiftBrick "Left" window canvas shift_brick_left gameMVar
       setupCommandKeyShiftBrick "A" window canvas shift_brick_left gameMVar
       setupCommandKeyShiftBrick "a" window canvas shift_brick_left gameMVar
       
       -- Shift Right Brick
       setupCommandKeyShiftBrick "Right" window canvas shift_brick_right gameMVar
       setupCommandKeyShiftBrick "D" window canvas shift_brick_right gameMVar
       setupCommandKeyShiftBrick "d" window canvas shift_brick_right gameMVar
       
       -- Soft Drop Brick
       setupCommandKeyShiftBrick "Down" window canvas soft_drop_brick gameMVar
       setupCommandKeyShiftBrick "S" window canvas soft_drop_brick gameMVar
       setupCommandKeyShiftBrick "s" window canvas soft_drop_brick gameMVar
       
       -- Hard Drop Brick
       setupCommandKeyShiftBrick "Up" window canvas drop_lock_clear_next_brick gameMVar
       setupCommandKeyShiftBrick "W" window canvas drop_lock_clear_next_brick gameMVar
       setupCommandKeyShiftBrick "w" window canvas drop_lock_clear_next_brick gameMVar       
       
       -- Rotate Left Brick
       setupCommandKeyRotateBrick "q" window canvas rotate_brick_left gameMVar keysIORef 
       setupCommandKeyRotateBrick "Q" window canvas rotate_brick_left gameMVar keysIORef
       setupCommandKeyRotateBrick "comma" window canvas rotate_brick_left gameMVar keysIORef
                    
       -- Rotate Right Brick
       setupCommandKeyRotateBrick "e" window canvas rotate_brick_right gameMVar keysIORef
       setupCommandKeyRotateBrick "E" window canvas rotate_brick_right gameMVar keysIORef
       setupCommandKeyRotateBrick "period" window canvas rotate_brick_right gameMVar keysIORef
       
       -- Pause/Resume Game
       setupCommandKeyPauseResumeGame "p" window canvas pause_resume gameMVar keysIORef
       setupCommandKeyPauseResumeGame "P" window canvas pause_resume gameMVar keysIORef
       
       return ()