-- Produced by boxnd-gen; edit the generator, not this file.

module Box3D.ParallelJoint
  ( create
  , setSpringHertz
  , setSpringDampingRatio
  , getSpringHertz
  , getSpringDampingRatio
  , setMaxTorque
  , getMaxTorque
  )

  where

import Foreign
import Box3D.Id (JointId(..), WorldId(..))
import Box3D.Types (ParallelJointDef)

foreign import ccall unsafe "b3CreateParallelJoint"
  c_b3CreateParallelJoint :: WorldId -> Ptr ParallelJointDef -> IO JointId

foreign import ccall unsafe "b3ParallelJoint_SetSpringHertz"
  c_b3ParallelJoint_SetSpringHertz :: JointId -> Float -> IO ()

foreign import ccall unsafe "b3ParallelJoint_SetSpringDampingRatio"
  c_b3ParallelJoint_SetSpringDampingRatio :: JointId -> Float -> IO ()

foreign import ccall unsafe "b3ParallelJoint_GetSpringHertz"
  c_b3ParallelJoint_GetSpringHertz :: JointId -> IO Float

foreign import ccall unsafe "b3ParallelJoint_GetSpringDampingRatio"
  c_b3ParallelJoint_GetSpringDampingRatio :: JointId -> IO Float

foreign import ccall unsafe "b3ParallelJoint_SetMaxTorque"
  c_b3ParallelJoint_SetMaxTorque :: JointId -> Float -> IO ()

foreign import ccall unsafe "b3ParallelJoint_GetMaxTorque"
  c_b3ParallelJoint_GetMaxTorque :: JointId -> IO Float

{- | Create a parallel joint
See also b3ParallelJointDef for details.

Binds @b3CreateParallelJoint@.
-}
create
  :: WorldId
  -> ParallelJointDef
  -> IO JointId
create :: WorldId -> ParallelJointDef -> IO JointId
create WorldId
a0 ParallelJointDef
a1 =
  ParallelJointDef
-> (Ptr ParallelJointDef -> IO JointId) -> IO JointId
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with ParallelJointDef
a1 ((Ptr ParallelJointDef -> IO JointId) -> IO JointId)
-> (Ptr ParallelJointDef -> IO JointId) -> IO JointId
forall a b. (a -> b) -> a -> b
$ \Ptr ParallelJointDef
p1 ->
  WorldId -> Ptr ParallelJointDef -> IO JointId
c_b3CreateParallelJoint WorldId
a0 Ptr ParallelJointDef
p1

{- | Set the spring stiffness in Hertz

Binds @b3ParallelJoint_SetSpringHertz@.
-}
setSpringHertz
  :: JointId
  -> Float
  -- ^ @hertz@
  -> IO ()
setSpringHertz :: JointId -> Float -> IO ()
setSpringHertz JointId
a0 Float
a1 =
  JointId -> Float -> IO ()
c_b3ParallelJoint_SetSpringHertz JointId
a0 Float
a1

{- | Set the spring damping ratio, non-dimensional

Binds @b3ParallelJoint_SetSpringDampingRatio@.
-}
setSpringDampingRatio
  :: JointId
  -> Float
  -- ^ @dampingRatio@
  -> IO ()
setSpringDampingRatio :: JointId -> Float -> IO ()
setSpringDampingRatio JointId
a0 Float
a1 =
  JointId -> Float -> IO ()
c_b3ParallelJoint_SetSpringDampingRatio JointId
a0 Float
a1

{- | Get the spring Hertz

Binds @b3ParallelJoint_GetSpringHertz@.
-}
getSpringHertz
  :: JointId
  -> IO Float
getSpringHertz :: JointId -> IO Float
getSpringHertz JointId
a0 =
  JointId -> IO Float
c_b3ParallelJoint_GetSpringHertz JointId
a0

{- | Get the spring damping ratio

Binds @b3ParallelJoint_GetSpringDampingRatio@.
-}
getSpringDampingRatio
  :: JointId
  -> IO Float
getSpringDampingRatio :: JointId -> IO Float
getSpringDampingRatio JointId
a0 =
  JointId -> IO Float
c_b3ParallelJoint_GetSpringDampingRatio JointId
a0

{- | Set the maximum spring torque, usually in newton-meters

Binds @b3ParallelJoint_SetMaxTorque@.
-}
setMaxTorque
  :: JointId
  -> Float
  -- ^ @force@
  -> IO ()
setMaxTorque :: JointId -> Float -> IO ()
setMaxTorque JointId
a0 Float
a1 =
  JointId -> Float -> IO ()
c_b3ParallelJoint_SetMaxTorque JointId
a0 Float
a1

{- | Get the maximum spring torque, usually in newton-meters

Binds @b3ParallelJoint_GetMaxTorque@.
-}
getMaxTorque
  :: JointId
  -> IO Float
getMaxTorque :: JointId -> IO Float
getMaxTorque JointId
a0 =
  JointId -> IO Float
c_b3ParallelJoint_GetMaxTorque JointId
a0