diff --git a/src/Dodge/Layout.hs b/src/Dodge/Layout.hs index 28e5e6bc2..b6ffd21a1 100644 --- a/src/Dodge/Layout.hs +++ b/src/Dodge/Layout.hs @@ -6,6 +6,7 @@ module Dodge.Layout ( shuffleRoomPos, ) where +import Control.Monad -- import Dodge.Path.Translate import qualified Control.Foldl as L import Control.Lens @@ -67,21 +68,26 @@ randomCompass w = setTiles :: GenWorld -> GenWorld setTiles gw = foldr setTile gw . reverse . IM.elems $ _genRooms gw +roomTileZeroShift :: Room -> Point2A +roomTileZeroShift rm = fromMaybe (rm ^. rmShift) + $ rm ^? rmFloor . tiles . ix 0 . tileZeroShift . _Just + setTile :: Room -> GenWorld -> GenWorld setTile r gw = case _rmFloor r of - Tiled{} -> gw + Tiled xs -> fromMaybe gw $ do + pid <- r ^. rmMParent + rm <- gw ^? genRooms . ix pid + guard $ rm ^? rmFloor . tiles . ix 0 . tileArrayZ == xs ^? ix 0 . tileArrayZ + return $ gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor . tiles . ix 0 . tileZeroShift + ?~ roomTileZeroShift rm InheritFloor -> gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly] where t = fromMaybe (Tile poly (V2 0 0) (V2 1 0) 16 Nothing) $ do pid <- r ^. rmMParent rm <- gw ^? genRooms . ix pid - (gw ^? genRooms . ix pid . rmFloor . tiles . ix 0) - <&> tileZeroShift ?~ _rmShift rm - --- t = case _rmMParent r of --- Nothing -> Tile poly (V2 0 0) (V2 1 0) 16 --- Just pid -> head $ _tiles $ _rmFloor $ _genRooms gw IM.! pid + (rm ^? rmFloor . tiles . ix 0) + <&> tileZeroShift ?~ roomTileZeroShift rm poly = orderPolygon . convexHullSafe diff --git a/src/Dodge/Room/Link.hs b/src/Dodge/Room/Link.hs index 04468d85b..5e2b3e8c0 100644 --- a/src/Dodge/Room/Link.hs +++ b/src/Dodge/Room/Link.hs @@ -37,18 +37,13 @@ doRoomShift rm = shiftRoomBy (_rmShift rm) rm & rmShift .~ _rmShift rm shiftRoomBy :: (Point2, Float) -> Room -> Room shiftRoomBy shift r = r - & rmPolys %~ fmap (map (shiftPointBy shift)) - & rmLinks %~ fmap (shiftLinkBy shift) + & rmPolys . each . each %~ shiftPointBy shift + & rmLinks . each %~ shiftLinkBy shift & rmPath %~ S.map (shiftPathBy shift) - & rmBound %~ fmap (map (shiftPointBy shift)) + & rmBound . each . each %~ shiftPointBy shift & rmShift %~ shiftPosDirBy shift & rmFloor . tiles . each %~ shiftTile shift --- %~ map --- ( (tilePoly %~ map (shiftPointBy shift)) --- . (tileZero %~ shiftPointBy shift) --- . (tileTangentPos %~ shiftPointBy shift) --- ) - & rmViewpoints %~ map (shiftPointBy shift) + & rmViewpoints . each %~ shiftPointBy shift shiftTile :: Point2A -> Tile -> Tile shiftTile shift tl = case tl ^. tileZeroShift of diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index d964bb883..4328a7f1c 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -430,12 +430,15 @@ loadAmmoTut = do . analyserByDoor (RequireEquipment (AMMOMAG DRUMMAG)) i =<< shuffleLinks =<< join (takeOne [roomNgon 6 80, roomRectAutoLights 100 100]) +-- =<< join (takeOne [roomNgon 6 80]) j <- nextLayoutInt wprm <- putSingleLight . addDoorAtNthLinkToggleInterrupt 0 ["DOOR LOCKDOWN ACTIVE"] j =<< shuffleLinks - =<< roomRectAutoLights 100 100 +-- =<< roomRectAutoLights 100 100 + =<< join (takeOne [roomNgon 6 80, roomRectAutoLights 100 100]) +-- =<< join (takeOne [roomNgon 6 80]) droom <- distributerRoom BulletAmmo (10 ^ (4::Int)) ncrits <- takeOne [1,1,2,2,2,3] croom <- roomCCrits ncrits diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 98fafed5d..f43d0e6b2 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -35,8 +35,8 @@ import Data.Monoid import RandomHelp testStringInit :: Universe -> [String] -testStringInit u = -- fmap show (u ^.. uvWorld . cWorld . lWorld . creatures . ix 0 . crWallTouch . each) - (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage) +testStringInit _ = mempty -- fmap show (u ^.. uvWorld . cWorld . lWorld . creatures . ix 0 . crWallTouch . each) +-- (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage) -- (fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . each . crStance . carriage . strideAmount) -- a <> fromMaybe [] (do -- a w1 <- u ^? uvWorld . cWorld . lWorld . walls . ix 18 diff --git a/tags b/tags index 44540b3dc..76ecae7b0 100644 --- a/tags +++ b/tags @@ -3272,8 +3272,8 @@ doFloatFloat src/Dodge/FloatFunction.hs 5;" f doGenFloat src/Dodge/HeldUse.hs 1177;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f doHeldUseEffect src/Dodge/HeldUse.hs 379;" f -doInPlacements src/Dodge/Layout.hs 95;" f -doIndividualPlacements src/Dodge/Layout.hs 107;" f +doInPlacements src/Dodge/Layout.hs 101;" f +doIndividualPlacements src/Dodge/Layout.hs 113;" f doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f doItemTimeScroll src/Dodge/Update.hs 228;" f doLoop src/Loop.hs 60;" f @@ -3285,7 +3285,7 @@ doQuickload src/Dodge/Save.hs 83;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 8;" f doRegexInput src/Dodge/Update/Input/InGame.hs 423;" f -doRoomPlacements src/Dodge/Layout.hs 110;" f +doRoomPlacements src/Dodge/Layout.hs 116;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Scroll.hs 89;" f doSectionSize src/Dodge/DisplayInventory.hs 215;" f @@ -3619,9 +3619,9 @@ gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f gRandify src/Dodge/Randify.hs 12;" f gadgetEffect src/Dodge/HeldUse.hs 50;" f gameOverMenu src/Dodge/Menu.hs 200;" f -gameRoomFromRoom src/Dodge/Layout.hs 162;" f +gameRoomFromRoom src/Dodge/Layout.hs 168;" f gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f -gameRoomsFromRooms src/Dodge/Layout.hs 159;" f +gameRoomsFromRooms src/Dodge/Layout.hs 165;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f gasEffect src/Dodge/Update.hs 881;" f @@ -3630,7 +3630,7 @@ gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGraphs src/Dodge/Menu.hs 147;" f generateLayout src/Dodge/Layout/Generate.hs 11;" f -generateLevelFromRoomList src/Dodge/Layout.hs 37;" f +generateLevelFromRoomList src/Dodge/Layout.hs 38;" f generateWorldFromSeed src/Dodge/LevelGen.hs 18;" f geom src/Shader/Data.hs 110;" f geometryQuickCheckTests test/Spec.hs 59;" f @@ -3648,8 +3648,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 509;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 47;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 571;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 558;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 574;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 561;" f getDebugMouseOver src/Dodge/Update.hs 449;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f @@ -3666,13 +3666,13 @@ getPJStabiliser src/Dodge/HeldUse.hs 1271;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 554;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 557;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f getSplitString src/Dodge/Debug/Terminal.hs 129;" f -getTiles src/Dodge/Layout.hs 213;" f +getTiles src/Dodge/Layout.hs 219;" f getViewpoints src/Dodge/Viewpoints.hs 29;" f getVolleyBurst src/Dodge/HeldUse.hs 130;" f getWallPathing src/Dodge/Wall/Pathing.hs 7;" f @@ -4271,7 +4271,7 @@ moveCombineSel src/Dodge/Update/Scroll.hs 119;" f moveInverseShockwave src/Dodge/Shockwave/Update.hs 31;" f movePenBullet src/Dodge/Bullet.hs 203;" f moveProjectile src/Dodge/Projectile/Update.hs 249;" f -moveRoomBy src/Dodge/Room/Link.hs 53;" f +moveRoomBy src/Dodge/Room/Link.hs 58;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f moveStuckGrenade src/Dodge/Projectile/Update.hs 228;" f moveToSideNthOutLink src/Dodge/Room/Warning.hs 106;" f @@ -4403,7 +4403,7 @@ pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 85;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f -passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 636;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 639;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 66;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4444,7 +4444,7 @@ plNew src/Dodge/Base/NewID.hs 19;" f plNewID src/Dodge/Base/NewID.hs 7;" f plNewUpID src/Dodge/Base/NewID.hs 13;" f plNewUsing src/Dodge/Base/NewID.hs 27;" f -plPriority src/Dodge/Layout.hs 118;" f +plPriority src/Dodge/Layout.hs 124;" f plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f placeChasm src/Dodge/Placement/PlaceSpot.hs 147;" f placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 40;" f @@ -4599,7 +4599,7 @@ putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 100;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 58;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putSingleLight src/Dodge/Room/Tutorial.hs 454;" f +putSingleLight src/Dodge/Room/Tutorial.hs 457;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f putStrLnAppend src/Dodge/LevelGen.hs 84;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 52;" f @@ -4646,7 +4646,7 @@ randSpark src/Dodge/Spark.hs 70;" f randSparkExtraVel src/Dodge/Spark.hs 93;" f randWallReflect src/Dodge/Update.hs 728;" f randomChallenges src/Dodge/Room/Start.hs 64;" f -randomCompass src/Dodge/Layout.hs 60;" f +randomCompass src/Dodge/Layout.hs 61;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 248;" f randomFourCornerRoomCrsIts src/Dodge/Room/Procedural.hs 260;" f randomLightPositions src/Dodge/Room/Modify/Girder.hs 152;" f @@ -4774,6 +4774,7 @@ roomPillarsSquare src/Dodge/Room/Pillar.hs 50;" f roomRect src/Dodge/Room/Procedural.hs 42;" f roomRectAutoLights src/Dodge/Room/Procedural.hs 120;" f roomShuriken src/Dodge/Room/Boss.hs 116;" f +roomTileZeroShift src/Dodge/Layout.hs 71;" f roomTwistCross src/Dodge/Room/Boss.hs 147;" f roomsContaining src/Dodge/Room/Containing.hs 20;" f roomsContaining' src/Dodge/Room/Containing.hs 25;" f @@ -4884,7 +4885,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 240;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f sensorSPic src/Dodge/Machine/Draw.hs 97;" f -sensorTut src/Dodge/Room/Tutorial.hs 580;" f +sensorTut src/Dodge/Room/Tutorial.hs 583;" f sensorTypeDamages src/Dodge/Machine/Update.hs 286;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f @@ -4917,8 +4918,8 @@ setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 159;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f -setTile src/Dodge/Layout.hs 70;" f -setTiles src/Dodge/Layout.hs 67;" f +setTile src/Dodge/Layout.hs 75;" f +setTiles src/Dodge/Layout.hs 68;" f setTreeInts src/Dodge/Room/Tutorial.hs 96;" f setViewDistance src/Dodge/Update/Camera.hs 240;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f @@ -4934,7 +4935,7 @@ setupFramebufferGivenStencil src/Framebuffer/Setup.hs 31;" f setupLoop src/Loop.hs 30;" f setupShadowFramebuffer src/Framebuffer/Setup.hs 24;" f setupVBO src/Shader/Compile.hs 37;" f -setupWorldBounds src/Dodge/Layout.hs 125;" f +setupWorldBounds src/Dodge/Layout.hs 131;" f sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f shaderTypeExt src/Shader/Compile.hs 59;" f shapeBounds src/Dodge/Room/Foreground.hs 147;" f @@ -4957,19 +4958,20 @@ shiftInBy src/Dodge/PlacementSpot.hs 254;" f shiftInvItems src/Dodge/Update/Input/InGame.hs 294;" f shiftInvItemsDown src/Dodge/Inventory.hs 181;" f shiftInvItemsUp src/Dodge/Inventory.hs 191;" f -shiftLinkBy src/Dodge/Room/Link.hs 87;" f +shiftLinkBy src/Dodge/Room/Link.hs 92;" f shiftPSBy src/Dodge/Placement/Shift.hs 12;" f -shiftPathBy src/Dodge/Room/Link.hs 92;" f +shiftPathBy src/Dodge/Room/Link.hs 97;" f shiftPlacement src/Dodge/Placement/Shift.hs 21;" f shiftPoint3By src/Dodge/ShiftPoint.hs 20;" f shiftPointBy src/Dodge/ShiftPoint.hs 8;" f -shiftPosDirBy src/Dodge/Room/Link.hs 84;" f +shiftPosDirBy src/Dodge/Room/Link.hs 89;" f shiftRelativeToPS src/Dodge/Placement/Shift.hs 18;" f shiftRoomBy src/Dodge/Room/Link.hs 37;" f -shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f -shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f +shiftRoomShiftBy src/Dodge/Room/Link.hs 86;" f +shiftRoomShiftToLink src/Dodge/Room/Link.hs 75;" f shiftSetDown src/Dodge/Inventory.hs 174;" f shiftSetUp src/Dodge/Inventory.hs 168;" f +shiftTile src/Dodge/Room/Link.hs 48;" f shineTargetLaser src/Dodge/Creature/State.hs 201;" f shineTorch src/Dodge/Creature/State.hs 237;" f shootBullet src/Dodge/HeldUse.hs 995;" f @@ -5005,7 +5007,7 @@ shrinkVert src/Geometry/Polygon.hs 202;" f shuffle src/RandomHelp.hs 68;" f shuffleLinks src/Dodge/Room/Link.hs 30;" f shufflePair src/RandomHelp.hs 166;" f -shuffleRoomPos src/Dodge/Layout.hs 92;" f +shuffleRoomPos src/Dodge/Layout.hs 98;" f shuffleTail src/RandomHelp.hs 78;" f sigmoid src/Dodge/Base.hs 151;" f simpleCrSprings src/Dodge/Update.hs 959;" f @@ -5257,7 +5259,7 @@ throb1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 801;" f throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 761;" f throwItem src/Dodge/Creature/Action.hs 191;" f tileTexCoords src/Tile.hs 11;" f -tilesFromRooms src/Dodge/Layout.hs 210;" f +tilesFromRooms src/Dodge/Layout.hs 216;" f tilesToLine src/Shader/AuxAddition.hs 66;" f timeFlowUpdate src/Dodge/Update.hs 203;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f @@ -5376,11 +5378,11 @@ turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f tutAnoTree src/Dodge/Room/Tutorial.hs 53;" f tutDrop src/Dodge/Room/Tutorial.hs 101;" f -tutHub src/Dodge/Room/Tutorial.hs 478;" f +tutHub src/Dodge/Room/Tutorial.hs 481;" f tutLight src/Dodge/Room/Tutorial.hs 393;" f -tutRezBox src/Dodge/Room/Tutorial.hs 591;" f +tutRezBox src/Dodge/Room/Tutorial.hs 594;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 616;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 619;" f tweenAngles src/Geometry/Vector.hs 192;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f @@ -5611,7 +5613,7 @@ wallBuffer src/Dodge/WallCreatureCollisions.hs 99;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallMovement src/Dodge/WallCreatureCollisions.hs 68;" f wallToSurface src/Dodge/Base/Collide.hs 182;" f -wallsFromRooms src/Dodge/Layout.hs 147;" f +wallsFromRooms src/Dodge/Layout.hs 153;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f warmupSound src/Dodge/HeldUse.hs 1396;" f warningRooms src/Dodge/Room/Warning.hs 34;" f