--{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# 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.Input, ) where import qualified Data.IntMap.Strict as IM import NewInt import Control.Lens import Data.IntMap.Strict (IntMap) import Data.IntSet (IntSet) import qualified Data.Map.Strict as M import Data.Set (Set) import Dodge.Data.CWorld import Dodge.Data.Input import Dodge.Data.RightButtonOptions import Dodge.Data.SaveSlot import Dodge.Data.SoundOrigin import Geometry.Data import Sound.Data import System.Random data WorldEventFlag = InventoryChange | CombineInventoryChange deriving (Eq, Ord, Enum, Bounded) data World = World { _cWorld :: CWorld , _pastWorlds :: [LWorld] , _timeFlow :: TimeFlowStatus , _randGen :: StdGen , _toPlaySounds :: M.Map SoundOrigin Sound , _playingSounds :: M.Map SoundOrigin Sound , _input :: Input , _testFloat :: Float , _rbState :: RightButtonState , _hud :: HUD , _worldEventFlags :: Set WorldEventFlag , _crZoning :: IntMap (IntMap IntSet) , _clZoning :: IntMap (IntMap [Cloud]) , _dsZoning :: IntMap (IntMap [Dust]) , _wlZoning :: IntMap (IntMap IntSet) -- Zoning IM.IntMap Wall , _pnZoning :: IntMap (IntMap [(Int, Point2)]) --Zoning IM.IntMap Creature , _peZoning :: IntMap (IntMap (Set PathEdgeNodes)) , _incNodeZoning :: IntMap (IntMap [(Int, Point2)]) --Zoning IM.IntMap Creature , _gsZoning :: IntMap (IntMap IntSet) , _wCam :: Camera , _unpauseClock :: Int , _coordinates :: IM.IntMap Point2 -- temporary coordinates for world generation/placement } data TimeFlowStatus = RespawnDelay {_respawnDelay :: Int} | NormalTimeFlow | ItemScrollTimeFlow { _scrollSmoothing :: Int , _reverseAmount :: Int , _futureWorlds :: [LWorld] , _scrollItemID :: NewInt ItmInt } | CameraScrollTimeFlow { _scrollSmoothing :: Int , _reverseAmount :: Int , _futureWorlds :: [LWorld] } | RewindLeftClick { _reverseAmount :: Int , _scrollItemID :: NewInt ItmInt } | PausedTimeFlow { _timeFlowCharge :: Int , _scrollItemID :: NewInt ItmInt } makeLenses ''TimeFlowStatus makeLenses ''World