Apply side effects to universe not world

This commit is contained in:
2021-11-28 11:43:17 +00:00
parent 24480bbe52
commit d6fb6adc66
4 changed files with 52 additions and 28 deletions
+15 -8
View File
@@ -18,11 +18,12 @@ import Dodge.Event.Keyboard
import Dodge.Data
import Dodge.Base
import Dodge.Base.Window
import Dodge.PreloadData
--import Dodge.Creature.Action
import Dodge.SoundLogic
import Dodge.Inventory
--import Geometry
import Preload.Update
--import Preload.Update
import qualified IntMapHelp as IM
import Control.Lens
@@ -33,8 +34,14 @@ import Control.Lens
import qualified Data.Set as S
import SDL
handleEvent :: Event -> World -> Maybe World
handleEvent e = case eventPayload e of
handleEvent :: Event -> Universe -> Maybe Universe
handleEvent e uv = case handleEvent' e (_uvWorld uv) of
Nothing -> Nothing
Just w -> Just $ uv & uvWorld .~ w
handleEvent' :: Event -> World -> Maybe World
handleEvent' e = case eventPayload e of
KeyboardEvent kev -> handleKeyboardEvent kev
MouseMotionEvent mmev -> handleMouseMotionEvent mmev
MouseButtonEvent mbev -> handleMouseButtonEvent mbev
@@ -70,13 +77,13 @@ handleResizeEvent :: WindowSizeChangedEventData -> World -> Maybe World
handleResizeEvent sev w = Just
. set (config . windowX) (fromIntegral x)
. set (config . windowY) (fromIntegral y)
$ over sideEffects up
$ over sideEffects (sideEffectUpdatePreload divRes x y)
w
where
up :: (World -> IO World) -> World -> IO World
up f w' = do
pdata <- pdataResizeUpdate (x `div` divRes) (y `div` divRes) x y (_preloadData w')
f $ w' & preloadData .~ pdata
-- up :: (World -> IO World) -> World -> IO World
-- up f w' = do
-- pdata <- pdataResizeUpdate (x `div` divRes) (y `div` divRes) x y (_preloadData w')
-- f $ w' & preloadData .~ pdata
x = fromIntegral x'
y = fromIntegral y'
V2 x' y' = windowSizeChangedEventSize sev