{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Universe ( module Dodge.Data.Universe, module Dodge.Data.Config, module Dodge.Data.World, module Data.Preload, module Picture.Data, module Loop.Data, ) where 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) data Universe = Universe { _uvWorld :: World , _preloadData :: PreloadData , _uvScreenLayers :: [ScreenLayer] , _uvIOEffects :: Universe -> IO Universe , _uvSideEffects :: Seq SideEffect , _uvConfig :: Configuration , _uvTestString :: Universe -> [String] , _uvCanContinue :: Bool , _uvMSeed :: Maybe Int } data SideEffect = NewSideEffect { _ceSideEffect :: IO (Universe -> Maybe Universe) , _ceString :: String } | RunningSideEffect {_ceString :: String} | HardQuit data OptionScreenFlag = NormalOptions | GameOverOptions | SplashOptions deriving (Eq, Ord, Show, Read) --Generic, Flat) data ScreenLayer = OptionScreen { _scTitle :: Universe -> String , _scOptions :: [MenuOption] , _scDefaultEff :: Universe -> Universe , _scOptionFlag :: OptionScreenFlag , _scOptionsOffset :: Int , _scSelPos :: Maybe Int } | ColumnsScreen { _scTitle :: Universe -> String , _scColumns :: [(String, String)] } | InputScreen { _scInput :: T.Text , _scFooter :: String } -- | WaitScreen -- { _scWaitMessage :: Universe -> String -- , _scWaitTime :: Int -- } -- | DisplayScreen -- { _scDisplay :: Universe -> Picture -- } data MenuOptionDisplay = MODString {_modString :: String} | MODBlockedString {_modString :: String} | MODStringOption {_modString :: String, _modOption :: String} data MenuOption = Toggle { _moEff :: Universe -> Universe , _moString :: Universe -> MenuOptionDisplay } | Toggle2 { _moEff1 :: Universe -> Universe , _moEff2 :: Universe -> Universe , _moString :: Universe -> MenuOptionDisplay } | InvisibleToggle { _moChar :: Scancode , _moEff :: Universe -> Universe } data IntID a = IntID Int a makeLenses ''Universe makeLenses ''ScreenLayer makeLenses ''SideEffect makeLenses ''MenuOptionDisplay