Files
loop/src/Dodge/Data/World.hs
T

87 lines
2.5 KiB
Haskell

--{-# 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