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 :: Projectile -> World -> World
applyGravityPU pj 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 | otherwise = topj . pjVel . _z -~ 0.5
where where
topj = cWorld . lWorld . projectiles . ix (pj ^. pjID) topj = cWorld . lWorld . projectiles . ix (pj ^. pjID)
@@ -91,32 +92,21 @@ shellHitCreature p cr pj
(pj ^. pjDir - cr ^. crDir) (pj ^. pjDir - cr ^. crDir)
shellHitFloor :: Point3 -> Projectile -> World -> World shellHitFloor :: Point3 -> Projectile -> World -> World
shellHitFloor p pj w shellHitFloor p pj =
| z < 1 && norm (_pjVel pj) < 1 = w (topj . pjPos .~ (p & _z .~ 0.1))
| otherwise = . (topj . pjVel . _z %~ bouncez)
w . (topj . pjVel . _xy %~ decvel)
& topj . pjPos .~ (p & _z .~ 0.1) . (topj . pjSpin *~ 0.9)
& topj . pjVel . _z %~ bouncez . (bounceSound pj)
& topj . pjVel . _xy %~ decvel
& topj . pjSpin %~ decspin
& bounceSound pj
where where
bouncez x bouncez x = max 0 (-0.5 * x)
| x < -1 = -0.5 * x
| otherwise = 0
topj = cWorld . lWorld . projectiles . ix (pj ^. pjID) topj = cWorld . lWorld . projectiles . ix (pj ^. pjID)
zvel = pj ^. pjVel . _z
z = pj ^. pjPos . _z + zvel
decvel v decvel v
| magV v > 1 = rotateV (5 * pj ^. pjSpin) $ 0.8 * v | norm v > 1 = rotateV (5 * pj ^. pjSpin) $ 0.8 * v
| otherwise = 0 | otherwise = 0
decspin x
| abs x < 0.01 = 0
| otherwise = x * 0.9
destroyProjectile :: Projectile -> World -> World destroyProjectile :: Projectile -> World -> World
destroyProjectile pj = destroyProjectile pj = (cWorld . lWorld . projectiles %~ IM.delete pjid) . removelink
(cWorld . lWorld . projectiles %~ IM.delete pjid) . removelink
where where
pjid = pj ^. pjID pjid = pj ^. pjID
removelink = fromMaybe id $ do removelink = fromMaybe id $ do