First implementation of doors that lerp position/float pairs
This commit is contained in:
+7
-7
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user