Fix glassLesson room
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
module Dodge.Room.GlassLesson where
|
||||
import Dodge.RoomLink
|
||||
import Dodge.Creature
|
||||
import Dodge.LevelGen.Data
|
||||
import Dodge.RandomHelp
|
||||
import Dodge.Default.Wall
|
||||
import Dodge.Tree
|
||||
import Dodge.Placement.Instance
|
||||
--import Dodge.LevelGen.Data
|
||||
import Dodge.Room.Procedural
|
||||
import Dodge.Room.Corridor
|
||||
import Dodge.Room.Link
|
||||
import Dodge.Room.Door
|
||||
import Geometry
|
||||
import LensHelp
|
||||
|
||||
import qualified Data.Set as S
|
||||
import Control.Monad.State
|
||||
--import Control.Monad.Loops
|
||||
import System.Random
|
||||
import Data.Tree
|
||||
|
||||
-- TODO: partially combine a room tree into a room
|
||||
glassLesson :: RandomGen g => State g (SubCompTree Room)
|
||||
glassLesson = do
|
||||
i <- takeOne [1,2,3]
|
||||
corridors <- replicateM i $ PassDown <$> randomiseOutLinks corridor
|
||||
return $ Node (PassDown botRoom)
|
||||
[ singleUseNone $ door & rmConnectsTo .~ S.singleton (LabLink 0)
|
||||
, uppers
|
||||
, treeFromPost (PassDown (door & rmConnectsTo .~ S.singleton (OnEdge East))
|
||||
: corridors) $ UseAll door]
|
||||
where
|
||||
uppers = Node (PassDown $ door & rmConnectsTo .~ S.singleton (LabLink 1))
|
||||
[singleUseNone $ setInLinksPD (onBottomEdgeLeft . fst) topRoom]
|
||||
botRoom = set rmPmnts botplmnts $ roomRect 200 200 1 1
|
||||
& rmLinks %~ (setInLinksByType (OnEdge West)
|
||||
. addLabelLink 0 (onTopEdgeRight . _rlPos)
|
||||
. addLabelLink 1 (onTopEdgeLeft . _rlPos)
|
||||
)
|
||||
onTopEdgeRight (V2 x y) = x > 50 && y > 95
|
||||
onTopEdgeLeft (V2 x y) = x < 50 && y > 95
|
||||
onBottomEdgeLeft (V2 x y) = x < 50 && y < 5
|
||||
topRoom = set rmPmnts topplmnts $ roomRect 200 200 1 1
|
||||
botplmnts =
|
||||
[sPS (V2 0 0) 0 $ PutWall (rectNSWE 200 0 90 110) defaultCrystalWall
|
||||
,sPS (V2 50 100) 0 $ PutCrit miniGunCrit
|
||||
,RandomPlacement $ takeOne
|
||||
[ spanLightI (V2 160 (-20)) (V2 160 220)
|
||||
, mntLS vShape (V2 180 200) (V3 160 180 50)
|
||||
]
|
||||
]
|
||||
topplmnts =
|
||||
[windowLine (V2 100 200) (V2 100 0)
|
||||
,sPS (V2 50 100) 0 $ PutCrit miniGunCrit
|
||||
,RandomPlacement $ takeOne
|
||||
[ spanLightI (V2 160 (-20)) (V2 160 220)
|
||||
, mntLS vShape (V2 180 200) (V3 160 180 50)
|
||||
]
|
||||
]
|
||||
Reference in New Issue
Block a user