Tweak corpse/chasm interaction

This commit is contained in:
2026-04-03 09:14:18 +01:00
parent b4d7c43307
commit 18dc469408
3 changed files with 20 additions and 4 deletions
+1
View File
@@ -65,6 +65,7 @@ handWalkingPos b off cr = case cr ^. crStance . carriage of
Floating -> V3 0 off 12
Flying {} -> V3 0 off 12
Boosting _ -> V3 0 off 12
OnGround -> V3 0 off 12
zeroOneSmooth :: Float -> Float
zeroOneSmooth x = (1 - cos (pi * x)) / 2
+18 -4
View File
@@ -168,16 +168,30 @@ chasmTestCorpse cr w
w
& tocr . crZVel -~ 0.5
& tocr . crPos . _z +~ _crZVel cr
| Just (x, y) <- List.find g (w ^. cWorld . cliffs) =
-- only look for TWO cliffs to push along
| (xy:xys) <- filter g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy +~ normalizeV (vNormal (x - y))
& tocr . crPos . _xy +~ h xy xys
| any f (w ^. cWorld . chasms) = w & tocr . crZVel -~ 0.5
| otherwise = w
where
h :: (Point2,Point2) -> [(Point2,Point2)] -> Point2
h (x,y) [] = normalizeV (vNormal (x-y))
h x (y:_) = unitVectorAtAngle $ tweenAngles (d1/(d1+d2)) (h' x) (h' y)
where
h' :: (Point2,Point2) -> Float
h' = argV . vNormal . uncurry (-)
d a = uncurry closestPointOnLine a (cr ^. crPos . _xy)
d1 :: Float
d1 = norm (cxy - d x)
d2 :: Float
d2 = norm (cxy - d y)
cxy = cr ^. crPos . _xy
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ circOnSeg (cr ^. crPos . _xy) (crRad $ cr ^. crType)
f = pointInPoly (cr ^. crPos . _xy)
g = uncurry $ circOnSeg cxy (crRad $ cr ^. crType)
f = pointInPoly cxy
chasmRotate :: Creature -> Point2 -> World -> World
chasmRotate cr v w
+1
View File
@@ -24,6 +24,7 @@ data Carriage
| Flying {_zSpeed :: Float, _flyInertia :: Float, _oldOldPos :: Point2}
| Boosting Point2
| Falling {_fallFlail :: Float, _fallFoot :: FootForward}
| OnGround
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data FootForward = LeftForward | RightForward