{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.World ( module Dodge.Data.World, module Dodge.Data.SaveSlot, module Dodge.Data.CWorld, module Dodge.Data.RightButtonOptions, module Dodge.Data.SoundOrigin, module Dodge.Data.Hammer, ) where import Flat import Dodge.Data.SaveSlot import Control.Lens import qualified Data.Map.Strict as M import qualified Data.Set as S import Dodge.Data.CWorld import Dodge.Data.Hammer import Dodge.Data.RightButtonOptions import Dodge.Data.SoundOrigin import Geometry.Data import SDL (MouseButton, Scancode) import Sound.Data import StreamingHelp import System.Random data World = World { _cWorld :: CWorld , _randGen :: StdGen , _toPlaySounds :: M.Map SoundOrigin Sound , _playingSounds :: M.Map SoundOrigin Sound , _mousePos :: Point2 , _keys :: S.Set Scancode , _mouseButtons :: M.Map MouseButton Bool , _hammers :: M.Map WorldHammer HammerPosition , _testFloat :: Float , _lLine :: (Point2, Point2) , _rLine :: (Point2, Point2) , _lrLine :: (Point2, Point2) , _lSelect :: Point2 , _rSelect :: Point2 , _clickMousePos :: Point2 , _backspaceTimer :: Int , _timeFlow :: TimeFlowStatus , _rbOptions :: RightButtonOptions } data TimeFlowStatus = RewindingNow | RewindingLastFrame | NormalTimeFlow deriving (Eq, Ord, Show, Read, Generic, Flat) data WorldHammer = SubInvHam | DoubleMouseHam deriving (Eq, Ord, Show, Read, Enum, Bounded) type HitEffect' = Flame -> StreamOf (Point2, Either Creature Wall) -> World -> (World, Maybe Flame) makeLenses ''World