Make bouncing grenades stop spinning quicker

This commit is contained in:
2025-10-12 21:35:13 +01:00
parent 8b44538048
commit 9e7b7a3f76
+11 -21
View File
@@ -39,7 +39,8 @@ doGravityPU pj
applyGravityPU :: Projectile -> World -> World
applyGravityPU pj
| (pj ^. pjPos . _z) < 1 && norm (_pjVel pj) < 1 = topj . pjVel .~ 0
| (pj ^. pjPos . _z) < 1 && norm (_pjVel pj) < 1 =
(topj . pjVel .~ 0) . (topj . pjSpin .~ 0)
| otherwise = topj . pjVel . _z -~ 0.5
where
topj = cWorld . lWorld . projectiles . ix (pj ^. pjID)
@@ -91,32 +92,21 @@ shellHitCreature p cr pj
(pj ^. pjDir - cr ^. crDir)
shellHitFloor :: Point3 -> Projectile -> World -> World
shellHitFloor p pj w
| z < 1 && norm (_pjVel pj) < 1 = w
| otherwise =
w
& topj . pjPos .~ (p & _z .~ 0.1)
& topj . pjVel . _z %~ bouncez
& topj . pjVel . _xy %~ decvel
& topj . pjSpin %~ decspin
& bounceSound pj
shellHitFloor p pj =
(topj . pjPos .~ (p & _z .~ 0.1))
. (topj . pjVel . _z %~ bouncez)
. (topj . pjVel . _xy %~ decvel)
. (topj . pjSpin *~ 0.9)
. (bounceSound pj)
where
bouncez x
| x < -1 = -0.5 * x
| otherwise = 0
bouncez x = max 0 (-0.5 * x)
topj = cWorld . lWorld . projectiles . ix (pj ^. pjID)
zvel = pj ^. pjVel . _z
z = pj ^. pjPos . _z + zvel
decvel v
| magV v > 1 = rotateV (5 * pj ^. pjSpin) $ 0.8 * v
| norm v > 1 = rotateV (5 * pj ^. pjSpin) $ 0.8 * v
| otherwise = 0
decspin x
| abs x < 0.01 = 0
| otherwise = x * 0.9
destroyProjectile :: Projectile -> World -> World
destroyProjectile pj =
(cWorld . lWorld . projectiles %~ IM.delete pjid) . removelink
destroyProjectile pj = (cWorld . lWorld . projectiles %~ IM.delete pjid) . removelink
where
pjid = pj ^. pjID
removelink = fromMaybe id $ do