{- 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 Data.MessagePack import Fresco deriving instance Eq UnitQuaternion deriving instance Eq Vec2 deriving instance Eq Vec3 deriving instance Eq Vec4 instance ComponentClass Vec2 where toObj (Vec2 x y) = ObjectArray [ObjectFloat x, ObjectFloat y] fromObj (ObjectArray [ObjectFloat x, ObjectFloat y]) = (Vec2 x y) instance ComponentClass Vec3 where toObj (Vec3 x y z) = ObjectArray [ObjectFloat x, ObjectFloat y, ObjectFloat z] fromObj (ObjectArray [ObjectFloat x, ObjectFloat y, ObjectFloat z]) = (Vec3 x y z) instance ComponentClass Vec4 where toObj (Vec4 w x y z) = ObjectArray [ObjectFloat w, ObjectFloat x, ObjectFloat y, ObjectFloat z] fromObj (ObjectArray [ObjectFloat w, ObjectFloat x, ObjectFloat y, ObjectFloat z]) = (Vec4 w x y z) instance ComponentClass Quaternion where toObj (Q v) = toObj v fromObj o = Q (fromObj o) instance ComponentClass UnitQuaternion where toObj (U v) = toObj v fromObj o = U (fromObj o) -- | 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