Improvements to rooms and view distances
This commit is contained in:
+11
-16
@@ -21,11 +21,11 @@ import Dodge.Creature
|
||||
import Dodge.LightSource
|
||||
import Picture
|
||||
import Geometry
|
||||
import LensHelp
|
||||
|
||||
import qualified Data.Set as S
|
||||
import Data.Tree
|
||||
import System.Random
|
||||
import Control.Lens
|
||||
import Control.Monad.State
|
||||
--import Data.Tree
|
||||
import qualified Data.IntMap as IM
|
||||
@@ -95,14 +95,12 @@ southPillarsRoom x y h = do
|
||||
addSouthPillars :: RandomGen g => Float -> Float -> Room -> State g Room
|
||||
addSouthPillars x h r = do
|
||||
let pillarsa = []
|
||||
pillarsb = putBlockRect (x/5-20) (x/5+20) (h/2-20) (h/2+20)
|
||||
++ putBlockRect (2*x/5-20) (2*x/5+20) (h/2-20) (h/2+20)
|
||||
++ putBlockRect (3*x/5-20) (3*x/5+20) (h/2-20) (h/2+20)
|
||||
++ putBlockRect (4*x/5-20) (4*x/5+20) (h/2-20) (h/2+20)
|
||||
pillarsb = concat [putBlockRect (i*x/5-20) (i*x/5+20) (h/2-20) (h/2+20)
|
||||
| i <- map fromIntegral [1..4::Int]]
|
||||
pillarsc = putBlockRect (x/3-20) (x/3+20) (h/2-20) (h/2+20)
|
||||
++ putBlockRect (2*x/3-20) (2*x/3+20) (h/2-20) (h/2+20)
|
||||
pillars <- takeOne [pillarsa, pillarsb, pillarsc]
|
||||
return $ r & rmPmnts %~ (++ pillars)
|
||||
return $ r & rmPmnts .++~ pillars
|
||||
|
||||
addButtonSlowDoor :: RandomGen g => Float -> Float -> Room -> State g Room
|
||||
addButtonSlowDoor x h rm = do
|
||||
@@ -111,10 +109,9 @@ addButtonSlowDoor x h rm = do
|
||||
,( V2 (x/2+50) 5,0::Float)
|
||||
]
|
||||
thePlacement <- takeOne [butDoor butPos butRot ]
|
||||
shuffleLinks $ setOutLinksPD aboveH $ setInLinksPD belowH (rm
|
||||
& rmPmnts %~ (thePlacement :)
|
||||
& rmBound %~ (openDoorBound :)
|
||||
)
|
||||
shuffleLinks $ setOutLinksPD aboveH $ setInLinksPD belowH $ rm
|
||||
& rmPmnts .:~ thePlacement
|
||||
& rmBound .:~ openDoorBound
|
||||
where
|
||||
openDoorBound = rectNSEW (h + 5) (h - 5) (-x/2) (3*x/2)
|
||||
belowH y = (sndV2 . fst) y < h - 40
|
||||
@@ -149,9 +146,7 @@ slowDoorRoom = do
|
||||
slowDoorRoomRunPast :: RandomGen g => State g (SubCompTree Room)
|
||||
slowDoorRoomRunPast = do
|
||||
r <- slowDoorRoom
|
||||
return $ treeFromTrunk [PassDown door]
|
||||
(Node (PassDown r)
|
||||
[ singleUseAll door
|
||||
, return (UseLabel 0 $ door & rmConnectsTo .~ S.singleton InLink)
|
||||
]
|
||||
)
|
||||
return $ treeFromTrunk [PassDown door] $ Node (PassDown r)
|
||||
[ singleUseAll door
|
||||
, return (UseLabel 0 $ door & rmConnectsTo .~ S.singleton InLink)
|
||||
]
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
module Dodge.Room.LongRoom where
|
||||
import Dodge.RoomLink
|
||||
import Dodge.Tree
|
||||
--import Dodge.Default.Room
|
||||
import Dodge.Default.Wall
|
||||
import Dodge.LevelGen.Data
|
||||
import Dodge.Placement.Instance
|
||||
--import Dodge.Room.Link
|
||||
import Dodge.Room.Door
|
||||
import Dodge.Room.Corridor
|
||||
import Dodge.Room.Procedural
|
||||
--import Dodge.Layout.Tree.Either
|
||||
--import Dodge.LevelGen.Data
|
||||
--import Dodge.LevelGen.Switch
|
||||
import Dodge.RandomHelp
|
||||
import Dodge.Creature.Inanimate
|
||||
import Dodge.Creature
|
||||
--import Dodge.LightSource
|
||||
--import Picture
|
||||
import Geometry
|
||||
import LensHelp
|
||||
import Data.Tile
|
||||
|
||||
import qualified Data.Set as S
|
||||
import Data.Tree
|
||||
import System.Random
|
||||
import Control.Monad.State
|
||||
--import Data.Tree
|
||||
--import qualified Data.IntMap as IM
|
||||
|
||||
longRoom :: RandomGen g => State g Room
|
||||
longRoom = do
|
||||
h <- state $ randomR (1500,1500)
|
||||
let w = 75
|
||||
let cond x = (sndV2 . fst) x < h - 40
|
||||
let wlsNSEWs wln wls listew = [sps0 $ PutWall (rectNSWE wln wls wallw walle) defaultCrystalWall
|
||||
| (wallw,walle) <- listew ]
|
||||
let ws = wlsNSEWs (h-35) (h-135) [(-10,10) , (15,35) , (40,60) , (65,85)]
|
||||
let wsDefense = wlsNSEWs 95 70 [(0,25) , (50,75) ]
|
||||
brlN <- state $ randomR (0,5)
|
||||
brlOffsets <- replicateM brlN $ randInRect (w-20) 900
|
||||
let brls = [ sPS (p +.+ V2 10 200) 0 $ PutCrit explosiveBarrel | p <- brlOffsets ]
|
||||
let rm = roomRect w (h+70) 1 1 & rmPolys .++~ [rectNSWE h (h-165) (-45) (w+45)]
|
||||
& rmFloor .~ InheritFloor
|
||||
return $ restrictInLinks cond $ rm & rmPmnts .~ ws ++ brls ++ wsDefense ++
|
||||
[sPS (V2 crx (h-25)) 0 $ PutCrit longCrit
|
||||
| crx <- [12.5,37.5,62.5] ] ++
|
||||
[sPS (V2 25 lampy ) 0 putLamp | lampy <- [20,h-10] ]
|
||||
|
||||
longRoomRunPast :: RandomGen g => State g (SubCompTree Room)
|
||||
longRoomRunPast = do
|
||||
r <- longRoom
|
||||
return $ treeFromTrunk [PassDown door]
|
||||
(Node (PassDown r)
|
||||
[ singleUseAll door
|
||||
--, return (UseLabel 0 $ door & rmConnectsTo .~ S.singleton InLink)
|
||||
, treeFromPost [PassDown $ corridor & rmConnectsTo .~ S.singleton InLink, PassDown corridor]
|
||||
(UseLabel 0 $ door)
|
||||
]
|
||||
)
|
||||
@@ -25,6 +25,7 @@ import Dodge.Item.Random
|
||||
--import Geometry.Data
|
||||
import Geometry
|
||||
import Padding
|
||||
import LensHelp
|
||||
--import Color
|
||||
--import Shape
|
||||
|
||||
@@ -32,7 +33,6 @@ import qualified Data.Set as S
|
||||
--import Data.Maybe
|
||||
import Data.Tree
|
||||
import Control.Monad.State
|
||||
import Control.Lens
|
||||
import System.Random
|
||||
|
||||
rezBox :: LightSource -> Room
|
||||
@@ -90,24 +90,23 @@ rezBoxesWpCrit = do
|
||||
adddoor rm = treeFromPost [PassDown $ door & rmConnectsTo .~ S.singleton (OnEdge North)] (PassDown rm)
|
||||
|
||||
crAdd :: Room -> Room
|
||||
crAdd = rmPmnts %~ (sPS (V2 20 10) (0.5*pi) randC1 :)
|
||||
crAdd = rmPmnts .:~ sPS (V2 20 10) (0.5*pi) randC1
|
||||
|
||||
rezBoxes :: RandomGen g => State g (SubCompTree Room)
|
||||
rezBoxes = do
|
||||
w <- state $ randomR (100,400)
|
||||
h <- state $ randomR (40,40)
|
||||
thecol <- rezColor
|
||||
let bottomEdgeTest (V2 _ y,_) = y < 1
|
||||
dbox = treeFromPost [PassDown door] (PassDown $ rezInvBox thecol)
|
||||
centralRoom <- shuffleLinks $ setInLinksPD bottomEdgeTest
|
||||
((roomRectAutoLinks w h) {_rmPmnts = []})
|
||||
let n = length $ filter bottomEdgeTest $ map lnkPosDir $_rmLinks centralRoom
|
||||
-- let centralRoom' = restrictOutLinks bottomEdgeTest centralRoom
|
||||
let bottomEdgeTest = S.member (OnEdge South) . _rlType
|
||||
dbox = treeFromPost [PassDown $ door & rmConnectsTo .~ S.singleton (OnEdge South)]
|
||||
(PassDown $ rezInvBox thecol)
|
||||
centralRoom <- shuffleLinks $ (roomRectAutoLinks w h) {_rmPmnts = []}
|
||||
& rmLinks %~ setInLinks bottomEdgeTest
|
||||
let n = length $ filter bottomEdgeTest $_rmLinks centralRoom
|
||||
return $ treeFromTrunk [PassDown $ rezBox thecol
|
||||
, PassDown door
|
||||
]
|
||||
(Node (PassDown centralRoom) (replicate (n-1) dbox ++ [Node (UseAll door) []]))
|
||||
|
||||
|
||||
rezColor :: RandomGen g => State g LightSource
|
||||
rezColor = do
|
||||
|
||||
+6
-27
@@ -303,15 +303,12 @@ weaponBehindPillar = do
|
||||
|
||||
weaponBetweenPillars :: RandomGen g => State g (SubCompTree Room)
|
||||
weaponBetweenPillars = do
|
||||
wpPos <- takeOne [V2 x y | x <- [20,120,220], y <- [20,120,220]]
|
||||
critPlacementSpots <- replicateM 2 $ randDirPS $ unusedSpotAwayFromInLink 100
|
||||
let plmnts =
|
||||
sPS wpPos 0 (RandPS randFirstWeapon) :
|
||||
map (`sps` randC1) critPlacementSpots
|
||||
theRoom = roomPillars & rmPmnts %~ (++ plmnts)
|
||||
(fmap singleUseAll . randomiseOutLinks) =<< filterLinks f theRoom
|
||||
where
|
||||
f (_,a) = a == 0
|
||||
let wpPos = unusedSpotNearInLink 100
|
||||
ncrits <- state $ randomR (1,3)
|
||||
critPlacementSpots <- replicateM ncrits $ randDirPS $ unusedSpotAwayFromInLink 100
|
||||
let theRoom = roomPillars & rmPmnts .++~
|
||||
sps wpPos (RandPS randFirstWeapon) : map (`sps` randC1) critPlacementSpots
|
||||
return $ singleUseAll theRoom
|
||||
|
||||
weaponLongCorridor :: RandomGen g => State g (SubCompTree Room)
|
||||
weaponLongCorridor = do
|
||||
@@ -356,24 +353,6 @@ roomCCrits :: RandomGen g => State g Room
|
||||
roomCCrits = roomC 200 200
|
||||
<&> rmPmnts %~ (replicate 20 (spNoID (PSRoomRand 0 (uncurry PS)) randC1) ++ )
|
||||
|
||||
longRoom :: RandomGen g => State g Room
|
||||
longRoom = do
|
||||
h <- state $ randomR (1500,1500)
|
||||
let w = 75
|
||||
let cond x = (sndV2 . fst) x < h - 40
|
||||
let wlsNSEWs wln wls listew = [sps0 $ PutWall (rectNSWE wln wls wallw walle) defaultCrystalWall
|
||||
| (wallw,walle) <- listew ]
|
||||
let ws = wlsNSEWs (h-35) (h-135) [(-10,10) , (15,35) , (40,60) , (65,85)]
|
||||
let wsDefense = wlsNSEWs 95 70 [(0,25) , (50,75) ]
|
||||
brlOffsets <- replicateM 5 $ randInRect (w-20) 900
|
||||
let brls = [ sPS (p +.+ V2 10 200) 0 $ PutCrit explosiveBarrel | p <- brlOffsets ]
|
||||
let rm = roomRect w (h+70) 1 1 & rmPolys .++~ [rectNSWE h (h-165) (-45) (w+45)]
|
||||
& rmFloor .~ InheritFloor
|
||||
return $ restrictInLinks cond $ rm & rmPmnts .~ ws ++ brls ++ wsDefense ++
|
||||
[sPS (V2 crx (h-25)) 0 $ PutCrit longCrit
|
||||
| crx <- [12.5,37.5,62.5] ] ++
|
||||
[sPS (V2 25 lampy ) 0 putLamp | lampy <- [20,h-10] ]
|
||||
|
||||
doubleCorridorBarrels :: RandomGen g => State g Room
|
||||
doubleCorridorBarrels = do
|
||||
h <- state $ randomR (200,300)
|
||||
|
||||
Reference in New Issue
Block a user