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]