Files
loop/app/Main.hs
T

81 lines
2.9 KiB
Haskell

module Main where
import Loop
import Shader
import Shapes
import LoadConfig
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 Dodge.Floor
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)
main :: IO ()
main = do
(sizex,sizey) <- loadConfig
setupLoop
(sizex,sizey)
(doPreload >>= resizeSpareFBO sizex sizey)
cleanUpPreload
(fmap (setWindowSize sizex sizey) firstWorld)
( \preData w -> do
startTicks <- SDL.ticks
errs <- errors
if length errs > 0
then putStrLn $ "GLerror during doLoop: " ++ (unwords $ map show errs)
else return ()
clear [ColorBuffer,DepthBuffer]
(lightTicks,timeSpentPoking) <- renderPicture' (_renderData preData)
(_cameraRot w) (_cameraZoom w)
(_cameraPos w)
(_windowX w,_windowY w)
(wallsPointsAndCols w)
(wallsWindows w)
(lightsForGloom' w)
(_cameraCenter w)
(worldPictures w)
blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
renderFoldable (_renderData preData) (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
setWindowSize :: Int -> Int -> World -> World
setWindowSize x y w = w & windowX .~ fromIntegral x
& windowY .~ fromIntegral y