diff --git a/src/Dodge/Room/Teleport.hs b/src/Dodge/Room/Teleport.hs new file mode 100644 index 000000000..e9cec5d9e --- /dev/null +++ b/src/Dodge/Room/Teleport.hs @@ -0,0 +1,50 @@ +{- +Specification of rooms that teleport (between levels). +-} +module Dodge.Room.Teleport + where +import Dodge.Data +import Dodge.Base +import Dodge.Room.Data +import Dodge.Room.Procedural +import Dodge.Room.Placement +import Dodge.Layout +import Dodge.LevelGen.Data +import Geometry +import Picture +import Dodge.WorldEvent.Explosion + +import Control.Lens +import Control.Monad.State +import System.Random +import qualified Data.Set as S + +telRoomLev :: RandomGen g => Int -> State g Room +telRoomLev i = do + w <- state $ randomR (200,300) + h <- state $ randomR (200,300) + return $ roomRectAutoLinks w h & rmPS .~ + [ PS (w/2,h/2) 0 $ PutPressPlate telPP + , PS (w/2,h/2+ 30) 0 $ putLamp + ] + where + telPP = PressPlate + { _ppPict = setDepth 0.5 . color red $ polygon ppFootprint + , _ppPos = (0,0) + , _ppRot = 0 + , _ppEvent = levelReset + , _ppID = 0 + , _ppText = "NEW LEVEL" + } + ppFootprint = rectNSEW 20 (-20) 20 (-20) + levelReset pp w +-- | crInPolygon (you w) (ppPoly pp) = undefined -- makeExplosionAt (_ppPos pp) $ startNewGame w + | dist (_crPos $ you w) (_ppPos pp) < 20 = makeExplosionAt (_ppPos pp) $ startNewGame w + | otherwise = w + ppPoly pp = map (+.+ (_ppPos pp)) ppFootprint + startNewGame w = w & worldTriggers %~ S.insert (ResetLevel i) + -- generateFromList levx + -- $ initialWorld + -- & randGen .~ _randGen w + -- & windowX .~ _windowX w + -- & windowY .~ _windowY w