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

234 lines
6.1 KiB
Haskell

module Dodge.Default.World where
import Control.Lens
import Dodge.Data.SelectionList
import Data.Graph.Inductive.Graph hiding ((&))
import qualified Data.Map as M
import Dodge.Data.World
import Geometry.Data
import Geometry.Polygon
import qualified IntMapHelp as IM
import System.Random
defaultInput :: Input
defaultInput =
Input
{ _clickMousePos = V2 0 0
, _textInput = mempty
, _pressedKeys = mempty
, _mouseButtons = mempty
, _mousePos = V2 0 0
, _mouseMoving = False
, _scrollAmount = 0
, _previousScrollAmount = 0
, _lrLine = (0, 0)
, _lLine = (0, 0)
, _rLine = (0, 0)
, _lSelect = 0
, _rSelect = 0
, _scrollTestValue = 1
}
defaultWorld :: World
defaultWorld =
World
{ _cWorld = defaultCWorld
, _input = defaultInput
, _toPlaySounds = M.empty
, _playingSounds = M.empty
, _randGen = mkStdGen 2
, _testFloat = 0
, _rbOptions = NoRightButtonOptions
, _hud = defaultHUD
, _worldEventFlags = mempty
, _crZoning = mempty
, _clZoning = mempty
, _wlZoning = mempty
, _pnZoning = mempty
, _peZoning = mempty
, _gsZoning = mempty --Zoning IM.empty clZoneSize (zonePos _guPos)
}
defaultCWGen :: CWGen
defaultCWGen =
CWGen
{ _cwgParams = GenParams M.empty
, _cwgSeed = 0
, _cwgWorldBounds = defaultBounds
, _cwgGameRooms = []
, _cwgRoomClipping = []
}
defaultCWCam :: CamPos
defaultCWCam =
CamPos
{ _camCenter = V2 0 0
, _camRot = 0
, _camZoom = 1
, _camDefaultZoom = 1
, _camViewFrom = V2 0 0
, _camViewDistance = 1000
, _camItemZoom = 1
, _camBoundBox = square 100
, _camBoundDist = (100, -100, 100, -100)
}
defaultCWorld :: CWorld
defaultCWorld =
CWorld
{ _camPos = defaultCWCam
, _lWorld = defaultLWorld
, _cwGen = defaultCWGen
, _cClock = 0
, _pastWorlds = []
, _timeFlow = NormalTimeFlow
, _seenWalls = mempty
, _floorTiles = mempty
--, _pathGraph = mempty
, _pathGraph = Data.Graph.Inductive.Graph.empty
}
defaultLWorld :: LWorld
defaultLWorld =
LWorld
{ _magnets = IM.empty
, _modifications = IM.empty
, _creatures = IM.empty
, _creatureGroups = IM.empty
, _clouds = mempty
, _gusts = IM.empty
, _itemLocations = IM.empty
, _props = IM.empty
, _projectiles = IM.empty
, _instantBullets = []
, _bullets = []
, _flames = []
, _radarSweeps = []
, _sparks = []
, _posEvents = []
, _energyBalls = []
, _radarBlips = []
, _flares = []
, _newBeams = WorldBeams [] [] [] []
, _beams = WorldBeams [] [] [] []
, _teslaArcs = []
, _shockwaves = []
, _lasers = []
, _lasersToDraw = []
, _tractorBeams = mempty
, _linearShockwaves = mempty
, _walls = IM.empty
, _wallDamages = IM.empty
, _blocks = IM.empty
, _machines = IM.empty
, _terminals = IM.empty
, _doors = IM.empty
, _coordinates = IM.empty
, _triggers = IM.empty
, _floorItems = IM.empty
, _worldEvents = []
, _delayedEvents = []
, _pressPlates = IM.empty
, _buttons = IM.empty
, _corpses = IM.empty
, _decorations = IM.empty
, _lightSources = IM.empty
, _tempLightSources = []
, _seenLocations =
IM.fromList
[ (0, (WdYouPos, "CURRENT POSITION"))
, (1, (WdP2Const (V2 0 0), "START POSITION"))
]
, _selLocation = 0
, _foregroundShapes = mempty
, _distortions = []
, _lClock = 0
}
--defaultDisplaySections :: SelectionSections a
--defaultDisplaySections = SelectionSections
-- { _sssSections = mempty
-- , _sssSelPos = Just (0,0)
-- }
defaultHUD :: HUD
defaultHUD =
HUD
{ _hudElement = defaultDisplayInventory
, _carteCenter = V2 0 0
, _carteZoom = 0.5
, _carteRot = 0
, _closeObjects = []
}
defaultDisplayInventory :: HUDElement
defaultDisplayInventory = DisplayInventory
{_subInventory = NoSubInventory
, _diSections = defaultInvSections
-- , _invRegex = Nothing
-- , _closeRegex = Nothing
}
--youLight :: TempLightSource
--youLight = TLS
-- { _tlsParam = LSParam
-- {_lsPos = V3 0 0 0
-- ,_lsRad = 300
-- ,_lsCol = 0.1
-- }
-- ,_tlsUpdate = \w _ -> Just (youLight & tlsParam . lsPos .~ f (_crPos $ you w))
-- ,_tlsTime = 0
-- }
-- where
-- f (V2 x y) = V3 x y 100
defaultSSSExtra :: SSSExtra
defaultSSSExtra = SSSExtra
{_sssFilters = IM.fromList [(-1,mempty),(2,mempty)]
,_sssSelPos = Nothing
}
defaultInvSections :: SelectionSections ()
defaultInvSections = SelectionSections
{ _sssSections = IM.fromDistinctAscList $ zip [-1..]
[ defaultFiltSection
, defaultInvSection
, defaultYouSection
, defaultFiltSection & ssIndent .~ 2
& ssDescriptor .~ "NEARBY"
, defaultCOSection
]
, _sssExtra = defaultSSSExtra
}
defaultSS :: SelectionSection a
defaultSS = SelectionSection
{ _ssItems = mempty
, _ssCursor = Nothing
, _ssMinSize = 10
, _ssOffset = 0
, _ssShownItems = []
, _ssIndent = 0
, _ssDescriptor = ""
}
defaultCOSection :: SelectionSection ()
defaultCOSection = defaultSS
& ssIndent .~ 2
& ssDescriptor .~ "CLOSE OBJECTS"
defaultFiltSection :: SelectionSection a
defaultFiltSection = defaultSS
& ssIndent .~ 0
& ssDescriptor .~ "INV"
& ssMinSize .~ 0
defaultInvSection :: SelectionSection ()
defaultInvSection = defaultSS
& ssDescriptor .~ "INVENTORY ITEMS"
defaultYouSection :: SelectionSection ()
defaultYouSection = defaultSS
-- & ssRegex .~ UnavailableRegex
& ssIndent .~ 2
& ssMinSize .~ 1
& ssDescriptor .~ "YOUR STATUS"