Beef up minigun

This commit is contained in:
2021-08-28 12:09:39 +01:00
parent 1168da0531
commit 882a8e9824
17 changed files with 263 additions and 237 deletions
+18 -1
View File
@@ -91,7 +91,9 @@ radToDeg r = r * 180 / pi
-- | Normalize an angle to be between 0 and 2*pi radians
normalizeAngle :: Float -> Float
{-# INLINE normalizeAngle #-}
normalizeAngle f = f - 2 * pi * floor' (f / (2 * pi))
normalizeAngle f
| f >= 0 && f < 2*pi = f
| otherwise = f - 2 * pi * floor' (f / (2 * pi))
where
floor' :: Float -> Float
floor' x = fromIntegral (floor x :: Int)
@@ -126,3 +128,18 @@ projV fromv onv
dist :: Point2 -> Point2 -> Float
{-# INLINE dist #-}
dist !p1 !p2 = magV (p2 -.- p1)
-- | Finds a new angle a given fraction between two other angles
tweenAngles
:: Float
-> Float
-> Float
-> Float
{-# INLINE tweenAngles #-}
tweenAngles frac a1 a2
| abs (a1 - a2) < pi = frac * (a1 - a2) + a2
| otherwise = normalizeAngle $ go frac a1 a2
where
go frac' a1' a2'
| abs (a1' - a2') < pi = frac' * (a1' - a2') + a2'
| a1' > a2' = go frac' (a1' - 2*pi) a2'
| otherwise = go frac' a1' (a2' - 2*pi)