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) wlposs x = (dr ^. drFootPrint) & each . each %~ shiftPointBy (p2a x)
clerp = dr ^. drLerp clerp = dr ^. drLerp
newlerp newlerp
| toOpen && clerp < 1 = Just . min 1 $ clerp + 0.1 | toOpen && clerp < 1 = Just . min 1 $ clerp + speed
| clerp > 0 = Just . max 1 $ clerp - 0.1 | clerp > 0 && not toOpen = Just . max 0 $ clerp - speed
| otherwise = Nothing | otherwise = Nothing
toOpen = doWdBl (_drTrigger dr) w toOpen = doWdBl (_drTrigger dr) w
mvDir -- mvDir
| toOpen && _drStatus dr == DoorOpen = Nothing -- Not sure why necessary -- | toOpen && _drStatus dr == DoorOpen = Nothing -- Not sure why necessary
| toOpen && dist dpos dop > 0.5 = Just $ vecBetweenSpeed speed dpos dop -- | toOpen && dist dpos dop > 0.5 = Just $ vecBetweenSpeed speed dpos dop
| dist dpos dcp > 0.5 = Just $ vecBetweenSpeed speed dpos dcp -- | dist dpos dcp > 0.5 = Just $ vecBetweenSpeed speed dpos dcp
| otherwise = Nothing -- | otherwise = Nothing
speed = _drSpeed dr speed = _drSpeed dr
drid = _drID dr drid = _drID dr
moveUpdate = playSound . setStatus moveUpdate = playSound . setStatus
+8 -1
View File
@@ -4,6 +4,7 @@ module Dodge.Placement.PlaceSpot.TriggerDoor (
updateDoorEdges, updateDoorEdges,
) where ) where
import Linear
import Dodge.Data.GenWorld import Dodge.Data.GenWorld
import qualified Data.IntSet as IS import qualified Data.IntSet as IS
import Data.List import Data.List
@@ -91,11 +92,17 @@ plSlideDoor dr wl eo shiftOffset a b gw =
{ _drID = drid { _drID = drid
, _drWallIDs = IS.fromList wlids , _drWallIDs = IS.fromList wlids
, _drStatus = DoorClosed , _drStatus = DoorClosed
, _drMech = DoorMechanism -- , _drMech = DoorMechanism
, _drMech = DoorLerp
, _drPos = (a, b) , _drPos = (a, b)
, _drOpenPos = (shiftLeft a, shiftLeft b) , _drOpenPos = (shiftLeft a, shiftLeft b)
, _drClosePos = (a, 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 , _drObstacleType = eo
, _drSpeed = 1 / distance a (shiftLeft a)
} }
addDoorWalls w' = foldl' (addDoorWall eo drid wl) w' $ zip wlids pairs addDoorWalls w' = foldl' (addDoorWall eo drid wl) w' $ zip wlids pairs
pairs = rectanglePairs 9 a b pairs = rectanglePairs 9 a b