{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE BangPatterns #-}
module Graphics.WorldTurtle.Internal.Coords
( module GPoint
, module GArithmetic
, module GVector
, module GAngle
, lerp
, normalizeHeading
, normalizeDirection
) where
import Prelude hiding ((-), (+))
import qualified Prelude as P
import Graphics.Gloss.Data.Point as GPoint
import Graphics.Gloss.Data.Point.Arithmetic as GArithmetic
import Graphics.Gloss.Data.Vector as GVector
import Graphics.Gloss.Geometry.Angle as GAngle
lerp :: Float -> Point -> Point -> Point
lerp :: Float -> Point -> Point -> Point
lerp !Float
l !Point
a !Point
b = ((Float
1 Float -> Float -> Float
forall a. Num a => a -> a -> a
P.- Float
l) Float -> Point -> Point
`mulSV` Point
a) Point -> Point -> Point
+ (Float
l Float -> Point -> Point
`mulSV` Point
b)
normalizeHeading :: Float -> Float
normalizeHeading :: Float -> Float
normalizeHeading !Float
f
| Float
f Float -> Float -> Bool
forall a. Ord a => a -> a -> Bool
< Float
0 = Float -> Float
normalizeHeading (Float
f Float -> Float -> Float
forall a. Num a => a -> a -> a
P.+ Float
r)
| Float
f Float -> Float -> Bool
forall a. Ord a => a -> a -> Bool
> Float
r = Float -> Float
normalizeHeading (Float
f Float -> Float -> Float
forall a. Num a => a -> a -> a
P.- Float
r)
| Bool
otherwise = Float
f
where r :: Float
r = Float
360.0
normalizeDirection :: Float -> Float
normalizeDirection :: Float -> Float
normalizeDirection !Float
f
| Float
f Float -> Float -> Bool
forall a. Ord a => a -> a -> Bool
< -Float
r = Float -> Float
normalizeHeading (Float
f Float -> Float -> Float
forall a. Num a => a -> a -> a
P.+ Float
r)
| Float
f Float -> Float -> Bool
forall a. Ord a => a -> a -> Bool
> Float
r = Float -> Float
normalizeHeading (Float
f Float -> Float -> Float
forall a. Num a => a -> a -> a
P.- Float
r)
| Bool
otherwise = Float
f
where r :: Float
r = Float
180.0