diff --git a/appDodge/Main.hs b/appDodge/Main.hs index 7fc7a3036..9ec91d8d1 100644 --- a/appDodge/Main.hs +++ b/appDodge/Main.hs @@ -33,8 +33,8 @@ import Graphics.Rendering.OpenGL hiding (color, rotate, scale, translate) import qualified SDL import qualified SDL.Mixer as Mix -main :: IO () -main = do +main' :: IO () +main' = do (sizex,sizey) <- loadConfig theKeyConfig <- loadKeyConfig dodgeConfig <- loadDodgeConfig @@ -47,6 +47,39 @@ main = do handleEvent (Just . update) +main :: IO () +main = do + (sizex,sizey) <- loadConfig + theKeyConfig <- loadKeyConfig + dodgeConfig <- loadDodgeConfig + setupLoop' + (sizex,sizey) + theCleanup + (firstWorldLoad (sizex,sizey) theKeyConfig dodgeConfig) + theUpdateStep + handleEvent +-- (SDL.cursorVisible $= False >> doPreload >>= applyWorldConfig dodgeConfig) +-- (fmap (setWindowSize sizex sizey . (keyConfig .~ theKeyConfig) . (config .~ dodgeConfig)) firstWorld) +-- doSideEffects + +theCleanup :: World -> IO () +theCleanup w = SDL.cursorVisible $= True >> cleanUpPreload (_preloadData w) + +--firstWorldLoad :: Configuration -> IO World +firstWorldLoad (sizex,sizey) theKeyConfig theConfig = do + SDL.cursorVisible $= False + pdata <- doPreload >>= applyWorldConfig theConfig + w <- fmap (setWindowSize sizex sizey . (keyConfig .~ theKeyConfig) . (config .~ theConfig)) firstWorld + return $ w & preloadData .~ pdata + +theUpdateStep :: World -> IO World +theUpdateStep = applySideEffects . update + +applySideEffects :: World -> IO (World) +applySideEffects w = do + newpdata <- doSideEffects (_preloadData w) w + return $ w & preloadData .~ newpdata + doSideEffects :: PreloadData SoundOrigin -> World -> IO (PreloadData SoundOrigin) doSideEffects preData w = do --startTicks <- SDL.ticks diff --git a/src/Data/Preload.hs b/src/Data/Preload.hs index 6aef7b8b1..c5b29d369 100644 --- a/src/Data/Preload.hs +++ b/src/Data/Preload.hs @@ -14,5 +14,6 @@ data PreloadData a = PreloadData , _musicData :: MusicData , _frameTimer :: Word32 } + | DummyPdata makeLenses ''PreloadData diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index f85e18fd0..2e433bbf2 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -10,7 +10,7 @@ module Dodge.Creature.Picture import Dodge.Data --import Dodge.Base --import Dodge.Creature.Stance.Data -import Dodge.Creature.Perception.Data +--import Dodge.Creature.Perception.Data import Dodge.Creature.State.Data import Dodge.Creature.Stance.Data import Dodge.Creature.Memory.Data diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index efc9c4a0c..62043a7d7 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -109,6 +109,7 @@ data World = World , _lClickHammer :: HammerPosition , _radDistortion :: [(Point2,Point2,Point2,Float)] , _gameRooms :: [GameRoom] + , _preloadData :: PreloadData SoundOrigin } data OptionScreenFlag = NormalOptions | GameOverOptions data ScreenLayer diff --git a/src/Dodge/Default/World.hs b/src/Dodge/Default/World.hs index 4e96a8399..34d2bf1ff 100644 --- a/src/Dodge/Default/World.hs +++ b/src/Dodge/Default/World.hs @@ -10,6 +10,7 @@ import Dodge.Item.Data --import Picture import Geometry.Data --import Picture.Texture +import Data.Preload import System.Random import qualified Data.IntMap.Strict as IM @@ -84,6 +85,7 @@ defaultWorld = World , _foregroundEdgeVerx = [] , _radDistortion = [] , _gameRooms = [] + , _preloadData = DummyPdata -- hack TODO remove this } defaultDebugFlags :: DebugFlags defaultDebugFlags = DebugFlags diff --git a/src/Loop.hs b/src/Loop.hs index 9b3532104..c744abaa8 100644 --- a/src/Loop.hs +++ b/src/Loop.hs @@ -8,6 +8,7 @@ This module sets up an SDL window which may be updated using a simple game loop. module Loop ( setupLoop , setupMiniLoop + , setupLoop' ) where import qualified Data.Text as T import Control.Concurrent