First implementation of doors that lerp position/float pairs

This commit is contained in:
2025-10-21 23:39:57 +01:00
parent 39677c3a02
commit fdee74ff0c
2 changed files with 15 additions and 8 deletions
+7 -7
View File
@@ -72,15 +72,15 @@ doorLerp dr w = case newlerp of
wlposs x = (dr ^. drFootPrint) & each . each %~ shiftPointBy (p2a x)
clerp = dr ^. drLerp
newlerp
| toOpen && clerp < 1 = Just . min 1 $ clerp + 0.1
| clerp > 0 = Just . max 1 $ clerp - 0.1
| toOpen && clerp < 1 = Just . min 1 $ clerp + speed
| clerp > 0 && not toOpen = Just . max 0 $ clerp - speed
| otherwise = Nothing
toOpen = doWdBl (_drTrigger dr) w
mvDir
| toOpen && _drStatus dr == DoorOpen = Nothing -- Not sure why necessary
| toOpen && dist dpos dop > 0.5 = Just $ vecBetweenSpeed speed dpos dop
| dist dpos dcp > 0.5 = Just $ vecBetweenSpeed speed dpos dcp
| otherwise = Nothing
-- mvDir
-- | toOpen && _drStatus dr == DoorOpen = Nothing -- Not sure why necessary
-- | toOpen && dist dpos dop > 0.5 = Just $ vecBetweenSpeed speed dpos dop
-- | dist dpos dcp > 0.5 = Just $ vecBetweenSpeed speed dpos dcp
-- | otherwise = Nothing
speed = _drSpeed dr
drid = _drID dr
moveUpdate = playSound . setStatus
+8 -1
View File
@@ -4,6 +4,7 @@ module Dodge.Placement.PlaceSpot.TriggerDoor (
updateDoorEdges,
) where
import Linear
import Dodge.Data.GenWorld
import qualified Data.IntSet as IS
import Data.List
@@ -91,11 +92,17 @@ plSlideDoor dr wl eo shiftOffset a b gw =
{ _drID = drid
, _drWallIDs = IS.fromList wlids
, _drStatus = DoorClosed
, _drMech = DoorMechanism
-- , _drMech = DoorMechanism
, _drMech = DoorLerp
, _drPos = (a, b)
, _drOpenPos = (shiftLeft a, shiftLeft b)
, _drClosePos = (a, b)
, _drZeroPos = (a, 0)
, _drOnePos = (shiftLeft a, 0)
, _drLerp = 0
, _drFootPrint = IM.fromList $ zip wlids $ rectanglePairs 9 0 (b-a)
, _drObstacleType = eo
, _drSpeed = 1 / distance a (shiftLeft a)
}
addDoorWalls w' = foldl' (addDoorWall eo drid wl) w' $ zip wlids pairs
pairs = rectanglePairs 9 a b