{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Universe ( module Dodge.Data.Universe, module Dodge.Data.SelectionList, module Dodge.Data.Config, module Dodge.Data.World, module Data.Preload, module Picture.Data, module Loop.Data, ) where import Dodge.Data.SelectionList import Control.Lens --import qualified Data.Map.Strict as M import Data.Preload import Data.Sequence (Seq (..)) 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 | LoadingScreen deriving (Eq, Ord, Show, Read) --Generic, Flat) data PositionedMenuOption = BottomMenuOption { _pmoMenuOption :: MenuOption } | TopMenuOption { _pmoMenuOption :: MenuOption } | NoPositionedMenuOption data ScreenLayer = OptionScreen { _scTitle :: String , _scOptions :: [MenuOption] , _scOffset :: Int , _scPositionedMenuOption :: PositionedMenuOption , _scOptionFlag :: OptionScreenFlag , _scSelectionList :: SelectionList (Universe -> Universe) , _scAvailableLines :: Int , _scListDisplayParams :: ListDisplayParams } | InputScreen { _scInput :: String , _scFooter :: String } 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 } data IntID a = IntID Int a makeLenses ''Universe makeLenses ''ScreenLayer makeLenses ''SideEffect makeLenses ''MenuOptionDisplay makeLenses ''MenuOption makeLenses ''PositionedMenuOption