HODE-2008.10.27: src/Physics/ODE/Geom.hs
module Physics.ODE.Geom
(destroyGeom, setRawGeomData, setGeomData, setSafeGeomData,
getRawGeomData, getGeomData, getSafeGeomData, tryGetSafeGeomData,
setBody, getBodyUnsafe, getBody, setGeomPosition, getGeomPosition,
setGeomQuaternion, getGeomQuaternion, setGeomRotation,
getGeomRotation, isSpace, getSpace, getClass, enableGeom,
disableGeom, isGeomEnabled)
where
import Foreign
import Data.Typeable
import Data.Maybe
import Physics.ODE.Types
import Physics.ODE.Utilities
import Physics.ODE.Hsc
foreign import ccall unsafe "dGeomSetData" setRawGeomData ::
Ptr GeomStruct -> Ptr a -> IO ()
setGeomData :: Geom -> a -> IO ()
setGeomData body d
= newStablePtr d >>=
\ stablePtr -> setRawGeomData body (castStablePtrToPtr stablePtr)
setSafeGeomData :: (Typeable a) => Geom -> a -> IO ()
setSafeGeomData body d = setGeomData body (typeOf d, d)
foreign import ccall unsafe "dGeomGetData" getRawGeomData ::
Ptr GeomStruct -> IO (Ptr a)
getGeomData :: Geom -> IO a
getGeomData body
= getRawGeomData body >>= deRefStablePtr . castPtrToStablePtr
tryGetSafeGeomData :: (Typeable a) => Geom -> IO (Maybe a)
tryGetSafeGeomData body
= getGeomData body >>=
\ (t, d) ->
if t == typeOf d then return (Just d) else return Nothing
getSafeGeomData :: (Typeable a) => Geom -> IO a
getSafeGeomData
= fmap (fromMaybe (error errMsg)) . tryGetSafeGeomData
where errMsg = "Physics.ODE.Geom.getSafeGeomData: invalid type."
destroyGeom :: Geom -> IO ()
destroyGeom = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- destroyGeomdGeomDestroy marshaledArg_2
case () of
() -> do return ())
foreign import ccall unsafe "dGeomDestroy" destroyGeomdGeomDestroy :: Geom ->
IO ()
setBody :: Geom -> Maybe Body -> IO ()
setBody = \arg_0 arg_1 -> (\action_2 -> action_2 arg_0) (\marshaledArg_3 -> (case arg_1 of
Data.Maybe.Just a_4 -> \action_5 -> action_5 a_4
Data.Maybe.Nothing -> \action_6 -> action_6 nullPtr) (\marshaledArg_7 -> do ret_8 <- setBodydGeomSetBody marshaledArg_3 marshaledArg_7
case () of
() -> do return ()))
foreign import ccall unsafe "dGeomSetBody" setBodydGeomSetBody :: Geom ->
Body -> IO ()
getBodyUnsafe :: Geom -> IO Body
getBodyUnsafe = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- getBodyUnsafedGeomGetBody marshaledArg_2
return (ret_3))
foreign import ccall unsafe "dGeomGetBody" getBodyUnsafedGeomGetBody :: Geom ->
IO Body
getBody :: Geom -> IO (Maybe Body)
getBody = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- getBodydGeomGetBody marshaledArg_2
if (ret_3) == nullPtr
then return Nothing
else fmap Just (return (ret_3)))
foreign import ccall unsafe "dGeomGetBody" getBodydGeomGetBody :: Geom ->
IO Body
setGeomPosition :: Geom -> ODEreal -> ODEreal -> ODEreal -> IO ()
setGeomPosition = \arg_0 arg_1 arg_2 arg_3 -> (\action_4 -> action_4 arg_0) (\marshaledArg_5 -> (\action_6 -> action_6 arg_1) (\marshaledArg_7 -> (\action_8 -> action_8 arg_2) (\marshaledArg_9 -> (\action_10 -> action_10 arg_3) (\marshaledArg_11 -> do ret_12 <- setGeomPositiondGeomSetPosition marshaledArg_5 marshaledArg_7 marshaledArg_9 marshaledArg_11
case () of
() -> do return ()))))
foreign import ccall unsafe "dGeomSetPosition" setGeomPositiondGeomSetPosition :: Geom ->
ODEreal ->
ODEreal ->
ODEreal -> IO ()
getGeomPosition :: Geom -> IO ((ODEreal, ODEreal, ODEreal))
getGeomPosition = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- getGeomPositiondGeomGetPosition marshaledArg_2
peekVector3 (ret_3))
foreign import ccall unsafe "dGeomGetPosition" getGeomPositiondGeomGetPosition :: Geom ->
IO (Ptr ODEreal)
setGeomQuaternion :: Geom ->
(ODEreal, ODEreal, ODEreal, ODEreal) -> IO ()
setGeomQuaternion = \arg_0 arg_1 -> (\action_2 -> action_2 arg_0) (\marshaledArg_3 -> (\action_4 -> allocaArray 4 (\ptr_5 -> (>>) (pokeArray ptr_5 (case arg_1 of
(a_6,
b_7,
c_8,
d_9) -> [a_6,
b_7,
c_8,
d_9])) (action_4 ptr_5))) (\marshaledArg_10 -> do ret_11 <- setGeomQuaterniondGeomSetQuaternion marshaledArg_3 marshaledArg_10
case () of
() -> do return ()))
foreign import ccall unsafe "dGeomSetQuaternion" setGeomQuaterniondGeomSetQuaternion :: Geom ->
Ptr ODEreal ->
IO ()
getGeomQuaternion :: Geom ->
IO ((ODEreal, ODEreal, ODEreal, ODEreal))
getGeomQuaternion = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> allocaArray 4 (\marshaledArg_3 -> do ret_4 <- getGeomQuaterniondGeomGetQuaternion marshaledArg_2 marshaledArg_3
peekVector4 (marshaledArg_3)))
foreign import ccall unsafe "dGeomGetQuaternion" getGeomQuaterniondGeomGetQuaternion :: Geom ->
Ptr ODEreal ->
IO ()
setGeomRotation :: Geom -> Matrix3 -> IO ()
setGeomRotation = \arg_0 arg_1 -> (\action_2 -> action_2 arg_0) (\marshaledArg_3 -> (\action_4 -> action_4 arg_1) (\marshaledArg_5 -> do ret_6 <- setGeomRotationdGeomSetRotation marshaledArg_3 marshaledArg_5
case () of
() -> do return ()))
foreign import ccall unsafe "dGeomSetRotation" setGeomRotationdGeomSetRotation :: Geom ->
Matrix3 -> IO ()
getGeomRotation :: Geom -> IO Matrix3
getGeomRotation = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- getGeomRotationdGeomGetRotation marshaledArg_2
return (ret_3))
foreign import ccall unsafe "dGeomGetRotation" getGeomRotationdGeomGetRotation :: Geom ->
IO Matrix3
isSpace :: Geom -> IO Bool
isSpace = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- isSpacedGeomIsSpace marshaledArg_2
return (toBool (ret_3)))
foreign import ccall unsafe "dGeomIsSpace" isSpacedGeomIsSpace :: Geom ->
IO Int
getSpace :: Geom -> IO (Maybe Space)
getSpace = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- getSpacedGeomGetSpace marshaledArg_2
if (ret_3) == nullPtr
then return Nothing
else fmap Just (return (ret_3)))
foreign import ccall unsafe "dGeomGetSpace" getSpacedGeomGetSpace :: Geom ->
IO Space
getClass :: Geom -> IO GeomClass
getClass = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- getClassdGeomGetClass marshaledArg_2
return (toGeomClass (ret_3)))
foreign import ccall unsafe "dGeomGetClass" getClassdGeomGetClass :: Geom ->
IO Int
enableGeom :: Geom -> IO ()
enableGeom = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- enableGeomdGeomEnable marshaledArg_2
case () of
() -> do return ())
foreign import ccall unsafe "dGeomEnable" enableGeomdGeomEnable :: Geom ->
IO ()
disableGeom :: Geom -> IO ()
disableGeom = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- disableGeomdGeomDisable marshaledArg_2
case () of
() -> do return ())
foreign import ccall unsafe "dGeomDisable" disableGeomdGeomDisable :: Geom ->
IO ()
isGeomEnabled :: Geom -> IO Bool
isGeomEnabled = \arg_0 -> (\action_1 -> action_1 arg_0) (\marshaledArg_2 -> do ret_3 <- isGeomEnableddGeomIsEnabled marshaledArg_2
return (toBool (ret_3)))
foreign import ccall unsafe "dGeomIsEnabled" isGeomEnableddGeomIsEnabled :: Geom ->
IO Int