module HGamer3D.Data.Vector
(
module Data.Vect.Float,
module Data.Vect.Float.Util.Quaternion,
zeroVec2,
unitVec2,
zeroVec3,
unitVec3
)
where
import Data.Vect.Float
import Data.Vect.Float.Util.Quaternion
import Fresco
import Data.Binary.Serialise.CBOR
import Data.Binary.Serialise.CBOR.Decoding
import Data.Binary.Serialise.CBOR.Encoding
import Data.Text
import Data.Monoid
import Control.Applicative
deriving instance Eq UnitQuaternion
deriving instance Eq Vec2
deriving instance Eq Vec3
deriving instance Eq Vec4
zeroVec2 = Vec2 0.0 0.0
unitVec2 = Vec2 1.0 1.0
zeroVec3 = Vec3 0.0 0.0 0.0
unitVec3 = Vec3 1.0 1.0 1.0
instance Serialise Vec3 where
encode (Vec3 v1 v2 v3) = encodeListLen 3 <> encode v1 <> encode v2 <> encode v3
decode = decodeListLenOf 3 >> Vec3 <$> decode <*> decode <*> decode
instance Serialise UnitQuaternion where
encode (U (Vec4 v1 v2 v3 v4)) = encodeListLen 4 <> encode v1 <> encode v2 <> encode v3 <> encode v4
decode = decodeListLenOf 4 >> do
v <- Vec4 <$> decode <*> decode <*> decode <*> decode
return $ U v