Start unifying door placement types

This commit is contained in:
2025-10-24 22:13:30 +01:00
parent 6457f00ba7
commit b6736e2735
7 changed files with 118 additions and 103 deletions
+29 -31
View File
@@ -1,8 +1,10 @@
module Dodge.Placement.PlaceSpot.TriggerDoor (
plDoor',
plDoor,
plSlideDoor,
) where
import Dodge.Door.DoorLerp
import Dodge.Data.GenWorld
import Dodge.Default.Door
import Dodge.Default.Wall
@@ -14,11 +16,35 @@ import qualified IntMapHelp as IM
import LensHelp
import Linear
plDoor' ::
Door ->
Wall ->
GenWorld ->
(Int, GenWorld)
plDoor' dr wl gw =
( drid
, over gwWorld addWalls $ gw & gwWorld . cWorld . lWorld . doors . at drid ?~ newdr
-- carefull with the ordering of addWalls
)
where
isauto = case dr ^. drTrigger of
WdBlCrFilterNearPoint{} -> True
_ -> False
drid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . doors
wlid = IM.newKey $ gw ^. gwWorld . cWorld . lWorld . walls
pps = IM.elems $ dr ^. drFootPrint
newdr = dr & drID .~ drid & drFootPrint .~ IM.fromList (zip [wlid ..] pps)
lerposa = doDoorLerp dr (dr ^. drLerp)
addWalls =
insertStructureWalls
(`DoorPart` isauto)
wl
(map fst pps & each %~ shiftPointBy lerposa)
drid
wlid
plDoor ::
-- | Opening condition
WdBl ->
-- | Door positions, closed to open.
-- Bumped out up and down by 9, not widened
Float ->
Point2A ->
Point2A ->
@@ -55,32 +81,6 @@ plDoor cond l p1 p2 gw =
drid
wlid
--addWalls w' = foldl' (addDoorWall eo drid $ switchWallCol col) w' $ zip wlids
-- foldl' (addDoorWall isauto eo drid defaultDoorWall) w' $
-- zip wlids $
-- wlps' & each . each %~ shiftPointBy p1
--addDoorWall ::
-- Bool ->
-- S.Set EdgeObstacle ->
-- Int ->
-- Wall ->
-- World ->
-- (Int, (Point2, Point2)) ->
-- World
--addDoorWall isauto eo drid wl w (wlid, wlps) =
-- w'
-- & cWorld . lWorld . walls
-- %~ IM.insert
-- wlid
-- wl
-- { _wlLine = wlps
-- , _wlID = wlid
-- , _wlStructure = DoorPart drid isauto
-- }
-- where
-- w' = uncurry (obstructPathsCrossing eo) wlps w
plSlideDoor ::
Door ->
Wall ->
@@ -90,7 +90,6 @@ plSlideDoor ::
GenWorld ->
(Int, GenWorld)
plSlideDoor dr wl shiftOffset a b gw =
--(drid, over gwWorld addDoorWalls $ gw & gwWorld . cWorld . lWorld . doors %~ addDoor)
(drid, over gwWorld addWalls $ gw & gwWorld . cWorld . lWorld . doors %~ addDoor)
where
isauto = case dr ^. drTrigger of
@@ -118,4 +117,3 @@ plSlideDoor dr wl shiftOffset a b gw =
(map fst pairs)
drid
wlid
-- addDoorWalls w' = foldl' (addDoorWall isauto eo drid wl) w' $ zip wlids pairs