46 lines
1.6 KiB
Haskell
46 lines
1.6 KiB
Haskell
module Dodge.Room.Start where
|
|
import Dodge.LevelGen.Data
|
|
import Dodge.Room.Door
|
|
import Dodge.Room.Link
|
|
import Dodge.Room.Procedural
|
|
import Dodge.Room.Foreground
|
|
import Dodge.Room.Furniture
|
|
import Dodge.Placements
|
|
import Dodge.Layout.Tree.Polymorphic
|
|
--import Dodge.LevelGen.Data
|
|
import Geometry.Data
|
|
import Color
|
|
import Shape
|
|
|
|
import Data.Tree
|
|
import Control.Monad.State
|
|
import Control.Lens
|
|
import System.Random
|
|
import qualified Data.IntMap.Strict as IM
|
|
|
|
rezBox :: Room
|
|
rezBox = shiftRoomBy (V2 (-20) (-10),0) $ roomRect 40 20 1 1
|
|
& rmPmnts .~ [ spanColLightI (V3 0 0.7 0.2) 70 (V2 0 10) (V2 40 10) ]
|
|
|
|
startRoom :: RandomGen g => State g (Tree (Either Room Room))
|
|
startRoom = do
|
|
w <- state $ randomR (100,400)
|
|
h <- state $ randomR (200,400)
|
|
let plmnts =
|
|
[ sPS (V2 0 0) 0 $ PutForeground $ girderV 40 20 10 (V2 0 (h/2)) (V2 w (h/2))
|
|
, mntLS jShape (V2 0 (h/3)) (V3 40 (h/3) 70)
|
|
, tankSquareEmboss4 (dim orange) 50 (h-60)
|
|
, tankSquare (dim orange) 50 50
|
|
, tankSquare (dim orange) 50 120
|
|
, lightSensor (V2 (0.8*w) (0.25*h)) 0
|
|
, putLasTurret & plSpot .~ PS (V2 (0.8*w) (0.8*h)) 0
|
|
, sps0 $ PutForeground $ colorSH orange $ pipePP 2 (V3 50 50 25) (V3 50 120 25)
|
|
]
|
|
treeFromPost [Left rezBox, Left door] . Right
|
|
<$> randomiseOutLinks
|
|
((shiftRoomBy (V2 (-20) (-20),0)
|
|
$ roomRectAutoLinks w h & rmPmnts %~ (plmnts ++)
|
|
& rmStartWires .~ IM.fromList [(0,RoomWire (V2 0 0) 0)]
|
|
& rmEndWires .~ IM.fromList [(0,RoomWire (V2 500 500) 0)]
|
|
) & rmShift .~ (0,0) )
|