70 lines
2.4 KiB
Haskell
70 lines
2.4 KiB
Haskell
module Dodge.Room.RunPast where
|
|
import Dodge.UseAll
|
|
import Dodge.LevelGen.Data
|
|
import Dodge.LightSource
|
|
import Dodge.RoomLink
|
|
import Dodge.Data
|
|
--import Dodge.Default
|
|
--import Dodge.Layout.Tree.Either
|
|
import RandomHelp
|
|
import Dodge.Room.Door
|
|
--import Dodge.Room.Room
|
|
import Dodge.Room.Link
|
|
import Dodge.Room.Procedural
|
|
import Dodge.Room.Corridor
|
|
--import Dodge.Room.Foreground
|
|
--import Dodge.Room.RoadBlock
|
|
import Dodge.PlacementSpot
|
|
import Dodge.Placement.Instance
|
|
import Dodge.Tree
|
|
import Dodge.Item.Random
|
|
--import Dodge.Item.Weapon.SprayGuns
|
|
--import Dodge.Item.Weapon.Grenade
|
|
--import Dodge.LevelGen.Data
|
|
import Geometry.Data
|
|
--import Padding
|
|
import Color
|
|
import LensHelp
|
|
|
|
import qualified Data.Set as S
|
|
--import qualified Data.IntMap.Strict as IM
|
|
|
|
horEdgeTest :: (Float -> Bool) -> ((Point2,Float) -> Bool)
|
|
horEdgeTest t (V2 x _,_) = t x
|
|
|
|
roomCritLS :: RandomGen g => State g LightSource
|
|
roomCritLS = do
|
|
col <- takeOne [0.5, 0.6]
|
|
h <- takeOne [30,35]
|
|
rad <- takeOne [300]
|
|
return $ lsPosColRad (V3 0 0 h) col rad
|
|
|
|
critRoom :: Room
|
|
critRoom = corridorWallN & rmRandPSs .~ [psRandRanges (15,25) (30,45) (pi,2*pi)]
|
|
|
|
runPastRoom :: RandomGen g => Int -> State g (Tree Room)
|
|
runPastRoom i = do
|
|
h <- state $ randomR (200,400::Float)
|
|
theedgetest <- takeOne [horEdgeTest (<1), horEdgeTest (>39)]
|
|
thels <- roomCritLS
|
|
theweapon <- randBlockBreakWeapon
|
|
cenroom <- shuffleLinks $ restrictRMInLinksPD (\(V2 _ y,_) -> y < 1)
|
|
$ roomRectAutoLinks 40 h & rmPmnts .~ [plRRpt 0 (PutFlIt theweapon)]
|
|
theedge <- takeOne [West,East]
|
|
--let cenroom = filterSortOutLinksOn theedgetest ((\(V2 a b) -> (a,b)) . fst)
|
|
let linkcor = critRoom & rmPmnts .~ [ spanLS thels (V2 0 65) (V2 40 65) ]
|
|
critroom = linkcor & rmPmnts .:~ plRRpt 0 randC1
|
|
aswitchroom = corridorWallN
|
|
{_rmOutPmnt = [OutPlacement (putLitButOnPosExtTrig red useUnusedLnk) i]
|
|
,_rmPmnts = []
|
|
}
|
|
switchdoor = triggerDoorRoom i
|
|
n = length $ filter theedgetest $ map lnkPosDir $ _rmLinks cenroom
|
|
controom = treeFromPost [ switchdoor, linkcor] (useAll door)
|
|
critrooms :: [Tree Room]
|
|
critrooms = treeFromPost [ switchdoor] ( critroom) :
|
|
replicate (n-2) (treeFromPost [ switchdoor] ( linkcor))
|
|
return $ Node ( cenroom) $
|
|
map (over root $ rmConnectsTo .~ S.member (OnEdge theedge)) (controom : critrooms)
|
|
++ [return $ aswitchroom]
|