239 lines
7.2 KiB
Haskell
239 lines
7.2 KiB
Haskell
{-# 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 ) |]))
|