Add in "linear" lWorld to separate time reversable worlds

This commit is contained in:
2022-10-28 12:24:51 +01:00
parent 5f6bd43599
commit 7e790b7153
130 changed files with 827 additions and 980 deletions
+5 -5
View File
@@ -27,7 +27,7 @@ doorMechanism dr w = case mvDir of
w
& flip (IS.foldl' (flip (`translateWallID` d))) (_drWallIDs dr)
& moveUpdate
& cWorld . doors . ix drid . drPos . each %~ (+.+ d)
& cWorld . lWorld . doors . ix drid . drPos . each %~ (+.+ d)
& maybeClearDoorPaths (_drObstacleType dr) (_drObstructs dr)
Nothing -> w
where
@@ -47,9 +47,9 @@ doorMechanism dr w = case mvDir of
dop = snd $ _drOpenPos dr
dcp = snd $ _drClosePos dr
setStatus
| dist dpos dop < 1 = cWorld . doors . ix drid . drStatus .~ DoorOpen
| dist dpos dcp < 1 = cWorld . doors . ix drid . drStatus .~ DoorClosed
| otherwise = cWorld . doors . ix drid . drStatus .~ DoorHalfway
| dist dpos dop < 1 = cWorld . lWorld . doors . ix drid . drStatus .~ DoorOpen
| dist dpos dcp < 1 = cWorld . lWorld . doors . ix drid . drStatus .~ DoorClosed
| otherwise = cWorld . lWorld . doors . ix drid . drStatus .~ DoorHalfway
-- TODO use vector instead of list, perhaps also memoisation of rectanglePairs
-- TODO update _drPos
@@ -72,7 +72,7 @@ doorMechanismStepwise nsteps wlids pss dr w
toOpen = doWdBl (_drTrigger dr) w
setWalls n =
playSound (foldl' (&) w (zipWith moveWallID wlids newps))
& cWorld . doors . ix drid . drStatus .~ DoorInt n
& cWorld . lWorld . doors . ix drid . drStatus .~ DoorInt n
where
newps = uncurry (rectanglePairs 9) (pss !! n)