{-# LANGUAGE BangPatterns #-} module Dodge.ShiftPoint where import Geometry import Linear shiftPointBy :: Point2A -> Point2 -> Point2 shiftPointBy (pos, rot) !p = pos +.+ rotateV rot p compP2A :: Point2A -> Point2A -> Point2A compP2A (p1,r1) (p2,r2) = (p1 +.+ rotateV r1 p2, r1 + r2) lerpP2A :: Point2A -> Point2A -> Float -> Point2A lerpP2A (p1,a1) (p2,a2) x = (p1 + x *^ (p2 - p1), a1 + x * diffAngles a2 a1) invShiftPointBy :: (Point2, Float) -> Point2 -> Point2 invShiftPointBy (p1, r) p2 = rotateV (- r) $ p2 -.- p1 shiftPoint3By :: (Point2, Float) -> Point3 -> Point3 shiftPoint3By (pos, rot) (V3 x y z) = addZ z $ pos +.+ rotateV rot (V2 x y)