Refactor concurrent side effects

This commit is contained in:
2022-10-30 14:55:30 +00:00
parent 11e873ea48
commit 624a4c3bcd
10 changed files with 56 additions and 47 deletions
+17 -13
View File
@@ -1,5 +1,5 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
@@ -9,16 +9,17 @@ module Dodge.Data.Universe (
module Dodge.Data.World,
module Data.Preload,
module Picture.Data,
module Loop.Data
module Loop.Data,
) where
import Loop.Data
import Control.Lens
--import qualified Data.Map.Strict as M
import Data.Preload
import Data.Sequence (Seq (..))
import qualified Data.Text as T
import Dodge.Data.Config
import Dodge.Data.World
import Loop.Data
import Picture.Data
import SDL (Scancode)
@@ -27,18 +28,19 @@ data Universe = Universe
, _preloadData :: PreloadData
, _uvScreenLayers :: [ScreenLayer]
, _uvIOEffects :: Universe -> IO Universe
, _uvConcEffects :: ConcEffect
, _uvSideEffects :: Seq SideEffect
, _uvConfig :: Configuration
, _uvTestString :: Universe -> [String]
, _uvCanContinue :: Bool
, _uvMSeed :: Maybe Int
}
data ConcEffect = NoConcEffect
| NewConcEffect {_ceFunction :: ConcurrentEffect Universe
, _ceString :: String, _ceIsBlocking :: Bool}
| BlockingConcEffect {_ceString :: String}
| BackgroundConcEffect {_ceString :: String}
data SideEffect
= NewSideEffect
{ _ceSideEffect :: IO (Universe -> Maybe Universe)
, _ceString :: String
}
| RunningSideEffect {_ceString :: String}
data OptionScreenFlag = NormalOptions | GameOverOptions | SplashOptions
deriving (Eq, Ord, Show, Read) --Generic, Flat)
@@ -59,6 +61,7 @@ data ScreenLayer
{ _scInput :: T.Text
, _scFooter :: String
}
-- | WaitScreen
-- { _scWaitMessage :: Universe -> String
-- , _scWaitTime :: Int
@@ -67,9 +70,10 @@ data ScreenLayer
-- { _scDisplay :: Universe -> Picture
-- }
data MenuOptionDisplay = MODString {_modString :: String}
| MODBlockedString {_modString :: String}
| MODStringOption {_modString :: String,_modOption :: String}
data MenuOptionDisplay
= MODString {_modString :: String}
| MODBlockedString {_modString :: String}
| MODStringOption {_modString :: String, _modOption :: String}
data MenuOption
= Toggle
@@ -93,5 +97,5 @@ data IntID a = IntID Int a
makeLenses ''Universe
makeLenses ''ScreenLayer
makeLenses ''ConcEffect
makeLenses ''SideEffect
makeLenses ''MenuOptionDisplay