98 lines
2.9 KiB
Haskell
98 lines
2.9 KiB
Haskell
module Dodge.Initialisation where
|
|
import Dodge.Default.World
|
|
import Dodge.Save
|
|
import Dodge.Data
|
|
import Dodge.Data.SoundOrigin
|
|
import Dodge.Creature
|
|
import Dodge.Zone
|
|
import Dodge.Floor
|
|
import Dodge.Layout
|
|
import Dodge.Story
|
|
import Dodge.WorldEvent.Cloud
|
|
import Dodge.SoundLogic
|
|
import Dodge.SoundLogic.LoadSound
|
|
--import Dodge.Creature.Perception
|
|
import Geometry.Data
|
|
--import Picture
|
|
--import Dodge.GameRoom
|
|
--import Geometry
|
|
|
|
import System.Random
|
|
import qualified Data.Set as S
|
|
import qualified Data.IntMap.Strict as IM
|
|
import qualified Data.Map as M
|
|
import Data.Maybe
|
|
import Control.Lens
|
|
import Data.List (partition)
|
|
--import Data.List (sortOn)
|
|
|
|
firstWorld :: IO World
|
|
firstWorld = do
|
|
-- i <- randomRIO (0,5000)
|
|
let i = 2
|
|
putStrLn $ "Seed for level generation: " ++ show ( i :: Int)
|
|
return $ generateLevelFromRoomList levx $ initialWorld {_randGen = mkStdGen i}
|
|
|
|
initialWorld :: World
|
|
initialWorld = defaultWorld
|
|
{ _keys = S.empty
|
|
, _cameraCenter = V2 0 0
|
|
, _cameraRot = 0
|
|
, _cameraZoom = 10
|
|
, _creatures = IM.fromList [(0,startCr)]
|
|
, _projectiles = IM.empty
|
|
, _walls = IM.empty
|
|
, _forceFields = IM.empty
|
|
, _floorItems = IM.empty
|
|
, _randGen = mkStdGen 2
|
|
, _mousePos = V2 0 0
|
|
, _testString = testStringInit
|
|
, _yourID = 0
|
|
, _worldEvents = storeLevel . soundStart BackgroundSound (V2 0 0) foamSprayFadeOutS Nothing
|
|
. foldr ((.) . makeStartCloudAt) id [V3 x y 5 | x <- [-5,-3..5] , y <- [-5,-3..5]]
|
|
, _pressPlates = IM.empty
|
|
, _buttons = IM.empty
|
|
, _sounds = M.empty
|
|
, _decorations = IM.empty
|
|
, _storedLevel = Nothing
|
|
, _menuLayers = [TerminalScreen 300 rezText']
|
|
, _worldState = M.empty
|
|
}
|
|
-- TODO delete this duplicate
|
|
wallsAndWindows
|
|
:: World
|
|
-> ( [((Point2,Point2),Point4)] ,[((Point2,Point2),Point4)] )
|
|
wallsAndWindows w
|
|
= (map f wls, map f $ filter (fromMaybe True . (^? blVisible)) wins)
|
|
where
|
|
f wl = (_wlLine wl, _wlColor wl)
|
|
(wins,wls) = partition _wlIsSeeThrough . IM.elems $ wallsDoubleScreen w
|
|
testStringInit :: World -> [String]
|
|
testStringInit _ = []
|
|
--testStringInit w =
|
|
-- [show $ _worldMinX w
|
|
-- ,show $ _worldMaxX w
|
|
-- ,show $ _worldMinY w
|
|
-- ,show $ _worldMaxY w
|
|
-- ]
|
|
--testStringInit = mapMaybe f . IM.elems . wallsDoubleScreen
|
|
-- where
|
|
-- f (dr@Door{}) = Just . show $ _wlLine dr
|
|
-- f _ = Nothing
|
|
--testStringInit = map show . filter ((== col) . snd) . fst . wallsAndWindows
|
|
-- where
|
|
-- col = dim $ dim $ bright red
|
|
--testStringInit = mapMaybe f . IM.elems . flattenIMIMIM . _wallsZone
|
|
-- where
|
|
-- f (dr@Door{}) = Just . show $ _wlLine dr
|
|
-- f _ = Nothing
|
|
--testStringInit _ = []
|
|
--testStringInit w = [show . length $ newSounds w]
|
|
--testStringInit w = (show . _crPos $ _creatures w IM.! 0)
|
|
-- : (map show . _grBound . last $ sortOn _grName grs)
|
|
-- ++ closeRooms
|
|
-- where
|
|
-- closeRooms = map _grName $ filter (pointInOrOnPolygon p . _grBound) grs
|
|
-- grs = _gameRooms w
|
|
-- p = _cameraViewFrom w
|