module Main where import Loop import Shaders import Shapes import Dodge.Prototypes import Dodge.Data import Dodge.Initialisation import Dodge.Rooms import Dodge.Layout import Dodge.LoadSound import Dodge.Update import Dodge.KeyEvents import Dodge.Rendering import Dodge.Menu import Picture import Picture.Render import Picture.Preload import Sound import Preload import Control.Concurrent import Control.Lens import System.Random import qualified SDL as SDL import qualified SDL.Mixer as Mix import Graphics.Rendering.OpenGL hiding (color,scale,translate,rotate) initWorld = initialWorld { _randGen = mkStdGen 2 , _windowX = 800 , _windowY = 600 } pps = [(0,0),(50,0),(0,25)] ppt = [(0,0),(-0.50,0),(0.20,0.25)] main :: IO () main = do -- loadedSounds <- loadSounds setupLoop "windowName" 800 600 doPreload cleanUpPreload (initializeWorld $ generateFromTree lev1 $ initWorld) ( \preData w -> do startTicks <- SDL.ticks (lightTicks,timeSpentPoking) <- renderPicture' (_renderData preData) (_cameraRot w) (_cameraZoom w) (_cameraPos w) (_windowX w,_windowY w) (wallsForGloom w) (lightsForGloom' w) (worldPictures w) blendFunc $= (SrcAlpha,OneMinusSrcAlpha) renderTree (_renderData preData) (_cameraRot w) (_cameraZoom w) (_cameraPos w) (_windowX w,_windowY w) --(picToLTree (Just 1) $ fixedCoordPictures w) (picToLTree Nothing $ fixedCoordPictures w) endRenderTicks <- SDL.ticks playSoundQueue (_soundData preData) (_soundQueue w) newSoundData <- playAndUpdate (_sounds w) (_soundData preData) endMixerTicks <- SDL.ticks return $ (preData {_soundData = newSoundData}) & renderTime +~ (endRenderTicks - startTicks) & mixerTime +~ (endMixerTicks - endRenderTicks) & renderLighting +~ (lightTicks - startTicks) & renderPicture +~ (endRenderTicks - lightTicks) & pokeTime +~ timeSpentPoking ) (flip $ menuEvents $ flip handleEvent) (\w -> Just $ update w) Mix.closeAudio