diff --git a/app/Main.hs b/app/Main.hs index a71ef686d..1d75de0b9 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -34,25 +34,15 @@ 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 (sizex,sizey) <- loadConfig setupLoop "windowName" sizex sizey (doPreload >>= resizeSpareFBO sizex sizey) cleanUpPreload - (initializeWorld $ generateFromTree lev1 $ initWorld) + (fmap (setWindowSize sizex sizey) firstWorld) ( \preData w -> do startTicks <- SDL.ticks (lightTicks,timeSpentPoking) <- renderPicture' (_renderData preData) @@ -80,3 +70,7 @@ main = do (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 diff --git a/src/Dodge/Initialisation.hs b/src/Dodge/Initialisation.hs index 5b04bc77c..82bc9c39d 100644 --- a/src/Dodge/Initialisation.hs +++ b/src/Dodge/Initialisation.hs @@ -4,6 +4,8 @@ import Dodge.Prototypes import Dodge.Data import Dodge.Critters import Dodge.Base +import Dodge.Floor +import Dodge.Layout import Data.List import Data.Char @@ -22,13 +24,6 @@ import qualified Data.Set as S import qualified Data.IntMap.Strict as IM import qualified Data.Map as M ---import Graphics.Gloss ---import Graphics.Gloss.Interface.IO.Game ---import Graphics.Gloss.Geometry.Angle ---import Graphics.Gloss.Geometry.Line ---import qualified Graphics.Gloss.Data.Point.Arithmetic as PA ---import Graphics.Gloss.Data.Vector ---import Graphics.Gloss.Data.Point import Foreign.ForeignPtr import Control.Concurrent import Data.Tree @@ -36,6 +31,10 @@ import Data.Tree initializeWorld :: World -> World initializeWorld w = w +firstWorld :: IO World +firstWorld = return $ generateFromTree lev1 $ initialWorld + +initialWorld :: World initialWorld = basicWorld { _keys = S.empty , _cameraPos = (0,0) @@ -61,7 +60,7 @@ initialWorld = basicWorld , _menuState = LevelMenu 1 , _worldState = M.empty , _windowX = 800 - , _windowY = 840 + , _windowY = 600 } diff --git a/src/Loop.hs b/src/Loop.hs index f9ea9ca9e..93b709bfe 100644 --- a/src/Loop.hs +++ b/src/Loop.hs @@ -31,13 +31,14 @@ setupLoop :: String -> Int -> IO (PreloadData a) -> (PreloadData a -> IO ()) - -> world + -> IO world -> (PreloadData a -> world -> IO (PreloadData a)) -> (world -> Event -> Maybe world) -> (world -> Maybe world) -> IO () setupLoop wName xSize ySize - customInit initCleanup startWorld sideEffects eventFn worldFn = do + customInit initCleanup ioStartWorld sideEffects eventFn worldFn = do + startWorld <- ioStartWorld initializeAll bracket (createWindow (T.pack wName) (winConfig xSize ySize)) destroyWindow (\window ->