module Box2D.Events
( bodyMoveEvents
, sensorBeginTouchEvents
, sensorEndTouchEvents
, contactBeginTouchEvents
, contactEndTouchEvents
, contactHitEvents
, jointEvents
) where
import Data.Vector.Storable (Vector)
import Box2D.Id (WorldId)
import Box2D.Internal (copyVector)
import Box2D.Types
( BodyEvents (..)
, BodyMoveEvent
, ContactBeginTouchEvent
, ContactEndTouchEvent
, ContactEvents (..)
, ContactHitEvent
, JointEvent
, JointEvents (..)
, SensorBeginTouchEvent
, SensorEndTouchEvent
, SensorEvents (..)
)
import Box2D.World qualified as World
bodyMoveEvents :: WorldId -> IO (Vector BodyMoveEvent)
bodyMoveEvents :: WorldId -> IO (Vector BodyMoveEvent)
bodyMoveEvents WorldId
w = do
BodyEvents ptr n <- WorldId -> IO BodyEvents
World.getBodyEvents WorldId
w
copyVector (fromIntegral n) ptr
sensorBeginTouchEvents :: WorldId -> IO (Vector SensorBeginTouchEvent)
sensorBeginTouchEvents :: WorldId -> IO (Vector SensorBeginTouchEvent)
sensorBeginTouchEvents WorldId
w = do
SensorEvents beginPtr _ beginN _ <- WorldId -> IO SensorEvents
World.getSensorEvents WorldId
w
copyVector (fromIntegral beginN) beginPtr
sensorEndTouchEvents :: WorldId -> IO (Vector SensorEndTouchEvent)
sensorEndTouchEvents :: WorldId -> IO (Vector SensorEndTouchEvent)
sensorEndTouchEvents WorldId
w = do
SensorEvents _ endPtr _ endN <- WorldId -> IO SensorEvents
World.getSensorEvents WorldId
w
copyVector (fromIntegral endN) endPtr
contactBeginTouchEvents :: WorldId -> IO (Vector ContactBeginTouchEvent)
contactBeginTouchEvents :: WorldId -> IO (Vector ContactBeginTouchEvent)
contactBeginTouchEvents WorldId
w = do
ContactEvents beginPtr _ _ beginN _ _ <- WorldId -> IO ContactEvents
World.getContactEvents WorldId
w
copyVector (fromIntegral beginN) beginPtr
contactEndTouchEvents :: WorldId -> IO (Vector ContactEndTouchEvent)
contactEndTouchEvents :: WorldId -> IO (Vector ContactEndTouchEvent)
contactEndTouchEvents WorldId
w = do
ContactEvents _ endPtr _ _ endN _ <- WorldId -> IO ContactEvents
World.getContactEvents WorldId
w
copyVector (fromIntegral endN) endPtr
contactHitEvents :: WorldId -> IO (Vector ContactHitEvent)
contactHitEvents :: WorldId -> IO (Vector ContactHitEvent)
contactHitEvents WorldId
w = do
ContactEvents _ _ hitPtr _ _ hitN <- WorldId -> IO ContactEvents
World.getContactEvents WorldId
w
copyVector (fromIntegral hitN) hitPtr
jointEvents :: WorldId -> IO (Vector JointEvent)
jointEvents :: WorldId -> IO (Vector JointEvent)
jointEvents WorldId
w = do
JointEvents ptr n <- WorldId -> IO JointEvents
World.getJointEvents WorldId
w
copyVector (fromIntegral n) ptr