From 4cc5477f0716dd2a2b8a93df2869d2bbc7f34534 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 5 Oct 2025 20:47:28 +0100 Subject: [PATCH] Somewhat simplify RoomPos types --- src/Dodge/Data/Room.hs | 7 +++---- src/Dodge/PlacementSpot.hs | 17 +++++------------ src/Dodge/Room/Procedural.hs | 4 ++-- src/Dodge/Room/Room.hs | 8 ++++---- src/Dodge/Room/Tutorial.hs | 3 +++ 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/Dodge/Data/Room.hs b/src/Dodge/Data/Room.hs index 345cc075b..2c803b09a 100644 --- a/src/Dodge/Data/Room.hs +++ b/src/Dodge/Data/Room.hs @@ -64,6 +64,7 @@ data RPLinkStatus , _rplsInRoomID :: Int } | UnusedLink {_rplsType :: S.Set RoomLinkType} + | PathNodeRP | NotLink deriving (Eq, Ord, Show) @@ -71,10 +72,8 @@ data PathFromEdge = PathFromEdge CardinalPoint Int deriving (Eq, Ord, Show) data RoomPosType - = RoomPosOnPath {_onPathFromEdges :: S.Set PathFromEdge} - | RoomPosOffPath {_offPathFromEdges :: S.Set PathFromEdge} - | RoomPosExLink - | RoomPosLab Int + = RoomPosOnGrid {_onPathFromEdges :: S.Set PathFromEdge} + | RoomPosOffGrid {_offPathFromEdges :: S.Set PathFromEdge} deriving (Eq, Ord, Show) data UsedPos diff --git a/src/Dodge/PlacementSpot.hs b/src/Dodge/PlacementSpot.hs index 31ec3835b..ee3a17373 100644 --- a/src/Dodge/PlacementSpot.hs +++ b/src/Dodge/PlacementSpot.hs @@ -2,10 +2,9 @@ module Dodge.PlacementSpot ( atFstLnkOut, atNthLnkOutShiftBy, - rpIsOnPath, + rpIsOnGrid, rpIsOffPath, rpOffPathFromEdge, - rpOnPathFromEdge, useUnusedLnk, psRandRanges, useRoomPosCond, @@ -73,16 +72,16 @@ psposAddLabel lab = psSelect %~ (\f rp r -> f rp r & _Just . _2 . rpType %~ S.in rprBool :: (RoomPos -> Room -> Bool) -> PlacementSpot rprBool t = PSPos (useRoomPosRoomCond (S.singleton UsedPosLow) t) (const id) Nothing -rpIsOnPath :: RoomPos -> Bool -rpIsOnPath = any f . _rpType +rpIsOnGrid :: RoomPos -> Bool +rpIsOnGrid = any f . _rpType where - f RoomPosOnPath{} = True + f RoomPosOnGrid{} = True f _ = False rpIsOffPath :: RoomPos -> Bool rpIsOffPath = any f . _rpType where - f RoomPosOffPath{} = True + f RoomPosOffGrid{} = True f _ = False rpOffPathFromEdge :: PathFromEdge -> RoomPos -> Bool @@ -90,12 +89,6 @@ rpOffPathFromEdge pe = any f . _rpType where f rt = maybe False (pe `elem`) (rt ^? offPathFromEdges) --- test whether a roomPos is on the path with a given from edge value -rpOnPathFromEdge :: PathFromEdge -> RoomPos -> Bool -rpOnPathFromEdge pe = any f . _rpType - where - f rt = maybe False (pe `elem`) (rt ^? onPathFromEdges) - resetPLUse :: PlacementSpot -> PlacementSpot resetPLUse (PSPos f g fallback) = PSPos f' g fallback where diff --git a/src/Dodge/Room/Procedural.hs b/src/Dodge/Room/Procedural.hs index 3f88ee995..14cd6ba30 100644 --- a/src/Dodge/Room/Procedural.hs +++ b/src/Dodge/Room/Procedural.hs @@ -97,7 +97,7 @@ roomRect x y xn yn = . zipCountDown pth = linksGridToPath lnks $ map (bimap (+.+ V2 20 20) (+.+ V2 20 20)) (makeGrid xd xn yd yn) - makeonpos (p, a) = RoomPos p 0 (S.singleton $ RoomPosOnPath $ makerpedges a) + makeonpos (p, a) = RoomPos p 0 (S.singleton $ RoomPosOnGrid $ makerpedges a) NotLink mempty makerpedges (a, b) = S.fromList @@ -109,7 +109,7 @@ roomRect x y xn yn = posps = map (over _1 (+.+ V2 20 20)) $ gridPoints'' xd (xn + 1) yd (yn + 1) interposps = map (over _1 (+.+ V2 (20 + xd / 2) (20 + yd / 2))) $ gridPoints'' xd xn yd yn makeoffpos (p, a) = RoomPos - p 0 (S.singleton $ RoomPosOffPath $ makerpedges' a) NotLink mempty + p 0 (S.singleton $ RoomPosOffGrid $ makerpedges' a) NotLink mempty makerpedges' (a, b) = S.fromList [ PathFromEdge South b diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index 83de1526c..de19118de 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -205,7 +205,7 @@ weaponBetweenPillars = do (h, hn) <- takeOne [(240, 2), (340, 3)] let wpPos = rprBool $ \rp r -> and - [ rpIsOnPath rp + [ rpIsOnGrid rp , null $ _rpPlacementUse rp , _rpLinkStatus rp == NotLink , any ((< 100) . dist (_rpPos rp)) (usedRoomInLinkPoss r) @@ -215,7 +215,7 @@ weaponBetweenPillars = do critPlacementSpots <- replicateM ncrits $ randDirPS $ rprBool $ \rp r -> - rpIsOnPath rp + rpIsOnGrid rp && null (_rpPlacementUse rp) && all ((> 100) . dist (_rpPos rp)) (usedRoomLinkPoss r) ( roomPillars 30 w h wn hn @@ -334,7 +334,7 @@ pistolerRoom = do .++~ replicate 3 ( psPtPl - (rprBool $ \rp _ -> null (_rpPlacementUse rp) && rpIsOnPath rp) + (rprBool $ \rp _ -> null (_rpPlacementUse rp) && rpIsOnGrid rp) (PutCrit chaseCrit) ) @@ -374,7 +374,7 @@ spawnerRoom = do roomC x y <&> rmPmnts .:~ psPtPl ( rprBool $ \rp _ -> - null (_rpPlacementUse rp) && rpIsOnPath rp + null (_rpPlacementUse rp) && rpIsOnGrid rp && xV2 (_rpPos rp) < x / 2 && yV2 (_rpPos rp) < y / 2 ) diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index cfa7dfbf1..751e690ff 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -1,5 +1,6 @@ module Dodge.Room.Tutorial where +import Dodge.Room.Pillar import Dodge.Item.Held.Utility import Control.Monad import qualified Data.IntMap.Strict as IM @@ -43,6 +44,8 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor + , tToBTree "x" . return . cleatOnward <$> roomPillarsSquare + , corDoor , tutHub , tutLight , tutDrop