diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index 6c69bc070..18865e6a9 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -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