module HGamer3D.Bindings.Bullet.StructVec3 where
import Foreign
import Foreign.Ptr
import Foreign.C
import HGamer3D.Data.HG3DClass
import HGamer3D.Data.Vector
import HGamer3D.Data.Colour
import HGamer3D.Data.Angle
import Data.Bits
import HGamer3D.Data.Vector
newtype Vector3 = Vector3 Vec3
instance Storable Vector3 where
alignment _ = alignment (undefined :: CDouble)
sizeOf _ = 16
peek p = do
x <- (\ptr -> do {peekByteOff ptr 0 ::IO CFloat}) p
y <- (\ptr -> do {peekByteOff ptr 4 ::IO CFloat}) p
z <- (\ptr -> do {peekByteOff ptr 8 ::IO CFloat}) p
let v = Vector3 (Vec3 (realToFrac x) (realToFrac y) (realToFrac z))
return v
poke p (Vector3 (Vec3 x y z)) = do
(\ptr val -> do {pokeByteOff ptr 0 (val::CFloat)}) p (realToFrac x)
(\ptr val -> do {pokeByteOff ptr 4 (val::CFloat)}) p (realToFrac y)
(\ptr val -> do {pokeByteOff ptr 8 (val::CFloat)}) p (realToFrac z)
(\ptr val -> do {pokeByteOff ptr 12 (val::CFloat)}) p (realToFrac 0.0)
type Vector3Ptr = Ptr (Vector3)
type Vec3Ptr = Ptr (Vec3)
withVec3 :: Vec3 -> (Vec3Ptr -> IO b) -> IO b
withVec3 v f = with v' f' where
v' = Vector3 v
f' p = f (castPtr p)
peekVec3 p = do
(Vector3 v3) <- peek ((castPtr p)::Vector3Ptr)
return v3