Make bouncing grenades stop spinning quicker
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user