{- Vector library, imported from package Vect HGamer3D Library (A project to enable 3D game development in Haskell) Copyright 2011-2015 Peter Althainz Distributed under the Apache License, Version 2.0 (See attached file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0) file: HGamer3D/Data/Vector.hs -} {-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving #-} -- | Vector library for HGamer3D module HGamer3D.Data.Vector ( -- * the Vect libray of Balazs Komuves, see: module Data.Vect.Float, module Data.Vect.Float.Util.Quaternion, -- * some constants 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 -- | the 2d zero vector zeroVec2 = Vec2 0.0 0.0 -- | the 2d unity vector unitVec2 = Vec2 1.0 1.0 -- | the 3d Zero vector zeroVec3 = Vec3 0.0 0.0 0.0 -- | the 3d Unity vector 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