{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} module Dodge.Data.CWorld ( module Dodge.Data.CWorld, module Dodge.Data.Beam, module Dodge.Data.Block, module Dodge.Data.Bounds, module Dodge.Data.Bullet, module Dodge.Data.Button, module Dodge.Data.Cloud, module Dodge.Data.Corpse, module Dodge.Data.CrGroupParams, module Dodge.Data.Creature, module Dodge.Data.Damage, module Dodge.Data.Distortion, module Dodge.Data.Door, module Dodge.Data.EnergyBall, module Dodge.Data.Flame, module Dodge.Data.Flare, module Dodge.Data.FloorItem, module Dodge.Data.ForegroundShape, module Dodge.Data.GenParams, module Dodge.Data.Gust, module Dodge.Data.HUD, module Dodge.Data.Item, module Dodge.Data.Laser, module Dodge.Data.LightSource, module Dodge.Data.LinearShockwave, module Dodge.Data.Machine, module Dodge.Data.Magnet, module Dodge.Data.Modification, module Dodge.Data.PathGraph, module Dodge.Data.PosEvent, module Dodge.Data.PressPlate, module Dodge.Data.Projectile, module Dodge.Data.Prop, module Dodge.Data.RadarBlip, module Dodge.Data.RadarSweep, module Dodge.Data.Shockwave, module Dodge.Data.Spark, module Dodge.Data.Terminal, module Dodge.Data.TeslaArc, module Dodge.Data.TractorBeam, module Dodge.Data.Wall, module Dodge.Data.WorldEffect, ) where import TH.Derive import Data.Store import Data.Binary import Flat import LinearHelp import Control.Lens import Data.Aeson import Data.Aeson.TH import Data.Graph.Inductive import qualified Data.IntSet as IS import Dodge.Data.Beam import Dodge.Data.Block import Dodge.Data.Bounds import Dodge.Data.Bullet import Dodge.Data.Button import Dodge.Data.Cloud import Dodge.Data.Corpse import Dodge.Data.CrGroupParams import Dodge.Data.Creature import Dodge.Data.Damage import Dodge.Data.Distortion import Dodge.Data.Door import Dodge.Data.EnergyBall import Dodge.Data.Flame import Dodge.Data.Flare import Dodge.Data.FloorItem import Dodge.Data.ForegroundShape import Dodge.Data.GenParams import Dodge.Data.Gust import Dodge.Data.HUD import Dodge.Data.Item import Dodge.Data.Laser import Dodge.Data.LightSource import Dodge.Data.LinearShockwave import Dodge.Data.Machine import Dodge.Data.Magnet import Dodge.Data.Modification import Dodge.Data.PathGraph import Dodge.Data.PosEvent import Dodge.Data.PressPlate import Dodge.Data.Projectile import Dodge.Data.Prop import Dodge.Data.RadarBlip import Dodge.Data.RadarSweep import Dodge.Data.Shockwave import Dodge.Data.Spark import Dodge.Data.Terminal import Dodge.Data.TeslaArc import Dodge.Data.TractorBeam import Dodge.Data.Wall import Dodge.Data.WorldEffect import Dodge.GameRoom import Geometry.ConvexPoly import Geometry.Data import qualified IntMapHelp as IM import MaybeHelp import Picture.Data data CWCam = CWCam { _cwcCenter :: Point2 , _cwcRot :: Float , _cwcZoom :: Float -- smaller values zoom out , _cwcItemZoom :: Float , _cwcDefaultZoom :: Float , _cwcViewFrom :: Point2 , _cwcViewDistance :: Float , _cwcBoundBox :: [Point2] , _cwcBoundDist :: (Float, Float, Float, Float) -- NSEW, S and W negative } deriving (Eq, Ord, Show, Read, Generic, Flat) data CWorld = CWorld --{ _cameraCenter :: Point2 --, _cameraRot :: Float --, _cameraZoom :: Float -- smaller values zoom out --, _itemZoom :: Float --, _defaultZoom :: Float --, _cameraViewFrom :: Point2 --, _viewDistance :: Float --, _boundBox :: [Point2] --, _boundDist :: (Float, Float, Float, Float) -- NSEW, S and W negative { _cwCam :: CWCam , _creatures :: IM.IntMap Creature , _crZoning :: IM.IntMap (IM.IntMap IS.IntSet) , _creatureGroups :: IM.IntMap CrGroupParams , _itemLocations :: IM.IntMap ItemLocation , _clouds :: [Cloud] , _clZoning :: IM.IntMap (IM.IntMap [Cloud]) , _gusts :: IM.IntMap Gust , _gsZoning :: IM.IntMap (IM.IntMap IS.IntSet) , _props :: IM.IntMap Prop , _projectiles :: IM.IntMap Proj , _instantBullets :: [Bullet] , _bullets :: [Bullet] , _radarSweeps :: [RadarSweep] , _energyBalls :: [EnergyBall] , _posEvents :: [PosEvent] , _flames :: [Flame] , _sparks :: [Spark] , _radarBlips :: [RadarBlip] , _flares :: [Flare] , _newBeams :: WorldBeams , _beams :: WorldBeams , _teslaArcs :: [TeslaArc] , _shockwaves :: [Shockwave] , _lasers :: [LaserStart] , _lasersToDraw :: [Laser] , _linearShockwaves :: IM.IntMap LinearShockwave , _tractorBeams :: [TractorBeam] , _walls :: IM.IntMap Wall , _wallDamages :: IM.IntMap [Damage] , _doors :: IM.IntMap Door , _machines :: IM.IntMap Machine , _terminals :: IM.IntMap Terminal , _magnets :: IM.IntMap Magnet , _blocks :: IM.IntMap Block , _coordinates :: IM.IntMap Point2 , _triggers :: IM.IntMap Bool , _wlZoning :: IM.IntMap (IM.IntMap IS.IntSet) -- Zoning IM.IntMap Wall , _floorItems :: IM.IntMap FloorItem , _floorTiles :: [(Point3, Point3)] , _modifications :: IM.IntMap Modification , _yourID :: Int , _worldEvents :: [WdWd] , _delayedEvents :: [(Int, WdWd)] , _pressPlates :: IM.IntMap PressPlate , _buttons :: IM.IntMap Button , _decorations :: IM.IntMap Picture , _foregroundShapes :: IM.IntMap ForegroundShape , _corpses :: IM.IntMap Corpse , _pathGraph :: Gr Point2 PathEdge , _pnZoning :: IM.IntMap (IM.IntMap [(Int, Point2)]) --Zoning IM.IntMap Creature , _peZoning :: IM.IntMap (IM.IntMap [(Int, Int, PathEdge)]) --Zoning IM.IntMap Creature , _hud :: HUD , _lightSources :: IM.IntMap LightSource , _tempLightSources :: [TempLightSource] , _closeObjects :: [Either FloorItem Button] , _seenLocations :: IM.IntMap (WdP2, String) , _selLocation :: Int , _distortions :: [Distortion] , _cwTime :: CWTime , _cwGen :: CWGen } deriving (Eq, Show, Read, Generic) --hderiving (Eq, Show, Read, Generic, Flat) data CWTime = CWTime { _maybeWorld :: Maybe' CWorld , _rewindWorlds :: [CWorld] , _worldClock :: Int , _deathDelay :: Maybe Int } deriving (Eq, Show, Read, Generic) --hderiving (Eq, Show, Read, Generic, Flat) data CWGen = CWGen { _cwgParams :: GenParams , _cwgWorldBounds :: Bounds , _cwgGameRooms :: [GameRoom] -- consider using an IntMap , _cwgRoomClipping :: [ConvexPoly] , _cwgSeed :: Int } deriving (Eq, Ord, Show, Read, Generic, Flat) data WorldBeams = WorldBeams { _blockingBeams :: [Beam] , _lightBeams :: [Beam] , _positronBeams :: [Beam] , _electronBeams :: [Beam] } deriving (Eq, Ord, Show, Read, Generic, Flat) deriveJSON defaultOptions ''CWorld deriveJSON defaultOptions ''WorldBeams deriveJSON defaultOptions ''CWCam deriveJSON defaultOptions ''CWGen deriveJSON defaultOptions ''CWTime makeLenses ''CWorld makeLenses ''WorldBeams makeLenses ''CWCam makeLenses ''CWGen makeLenses ''CWTime $($(derive [d| instance Deriving (Store CWCam ) |])) $($(derive [d| instance Deriving (Store CWorld ) |])) $($(derive [d| instance Deriving (Store CWTime ) |])) $($(derive [d| instance Deriving (Store CWGen ) |])) $($(derive [d| instance Deriving (Store WorldBeams ) |]))