99 lines
3.3 KiB
Haskell
99 lines
3.3 KiB
Haskell
module Dodge.Floor
|
|
( levx
|
|
) where
|
|
import Geometry
|
|
import Picture
|
|
import Dodge.Data
|
|
import Dodge.Room
|
|
import Dodge.Room.Procedural
|
|
import Dodge.Room.Data
|
|
import Dodge.Room.Link
|
|
import Dodge.Base
|
|
import Dodge.Layout
|
|
import Dodge.Layout.Tree.Polymorphic
|
|
import Dodge.Layout.Tree.Either
|
|
import Dodge.Layout.Tree.GenerateStructure
|
|
import Dodge.Layout.Tree.Annotate
|
|
import Dodge.Layout.Tree.Shift
|
|
import Dodge.Creature
|
|
import Dodge.SoundLogic
|
|
import Dodge.RandomHelp
|
|
import Dodge.LightSources
|
|
import Dodge.LevelGen.Data
|
|
|
|
import Data.Tree
|
|
import Data.Maybe (fromJust,isNothing)
|
|
import Control.Lens
|
|
import Control.Monad.State
|
|
import Control.Monad.Loops
|
|
import System.Random
|
|
|
|
roomTreex :: RandomGen g => State g (Maybe [Room])
|
|
roomTreex = do
|
|
struct' <- aTreeStrut
|
|
let struct = Node [EndRoom] []
|
|
let t' = padCorridors struct
|
|
t = treeTrunk
|
|
[[StartRoom]
|
|
,[OrAno [[DoorAno]
|
|
,[Corridor]
|
|
,[DoorNumAno 0,AirlockAno]]
|
|
]
|
|
,[FirstWeapon]
|
|
,[Corridor]
|
|
]
|
|
t'
|
|
fmap (shiftExpandTree . expandTreeBy id) $ mapM annoToRoomTree t
|
|
|
|
levx :: RandomGen g => State g [Room]
|
|
levx = untilJust roomTreex
|
|
|
|
lev1' :: RandomGen g => State g (Tree Room)
|
|
lev1' = do
|
|
firstWeapon <- takeOne $ [[branchRectWith weaponRoom,blockedCorridor]] ++ replicate 5 [weaponRoom]
|
|
iterateWhile boundClip $ fmap (shiftRoomTree . expandTreeBy id)
|
|
$ sequence $ treePost
|
|
(
|
|
[return $ return $ Right deadEndRoom
|
|
]
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door
|
|
,glassSwitchBack >>= (fmap connectRoom . randomiseOutLinks)]
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door]
|
|
++ [miniRoom3]
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door]
|
|
++ [roomCCrits]
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door]
|
|
++[roomMiniIntro]
|
|
++ [longRoom >>= (fmap connectRoom . randomiseOutLinks)]
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door]
|
|
++ firstWeapon
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door]
|
|
++ [(fmap connectRoom . randomiseOutLinks) =<< pistolerRoom]
|
|
++ [return $ connectRoom door]
|
|
++ [(fmap connectRoom . randomiseOutLinks) =<< shooterRoom]
|
|
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
|
|
++ [return $ connectRoom (set rmPS [PS (20,40) 0 basicLS] corridor)]
|
|
++ [return $ connectRoom corridor]
|
|
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
|
|
++ [return $ connectRoom corridor]
|
|
++[return $ connectRoom corridor,return $ connectRoom door]
|
|
++ [shootingRange]
|
|
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
|
|
++[roomMiniIntro]
|
|
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
|
|
++ [return $ connectRoom corridor
|
|
,return $ connectRoom door
|
|
,slowDoorRoom]
|
|
++ [return $ connectRoom corridor
|
|
,spawnerRoom
|
|
,return $ connectRoom corridor
|
|
]
|
|
)
|
|
$ (fmap connectRoom . randomiseOutLinks) corridor
|