Collision object

Collision object physics API documentation

physics.JOINT_TYPE_SPRING

spring joint type

The following properties are available when connecting a joint of JOINT_TYPE_SPRING type:

PARAMETERS

length - The natural length between the anchor points.

frequency - The mass-spring-damper frequency in Hertz. A value of 0 disables softness.

damping - The damping ratio. 0 = no damping, 1 = critical damping.


physics.JOINT_TYPE_FIXED

fixed joint type

The following properties are available when connecting a joint of JOINT_TYPE_FIXED type:

PARAMETERS

max_length - The maximum length of the rope.


physics.JOINT_TYPE_HINGE

hinge joint type

The following properties are available when connecting a joint of JOINT_TYPE_HINGE type:

PARAMETERS

reference_angle - The bodyB angle minus bodyA angle in the reference state (radians).

lower_angle - The lower angle for the joint limit (radians).

upper_angle - The upper angle for the joint limit (radians).

max_motor_torque - The maximum motor torque used to achieve the desired motor speed. Usually in N-m.

motor_speed - The desired motor speed. Usually in radians per second.

enable_limit - A flag to enable joint limits.

enable_motor - A flag to enable the joint motor.

joint_angle - READ ONLYCurrent joint angle in radians. (Read only field, available from physics.get_joint_properties())

joint_speed - READ ONLYCurrent joint angle speed in radians per second. (Read only field, available from physics.get_joint_properties())


physics.JOINT_TYPE_SLIDER

slider joint type

The following properties are available when connecting a joint of JOINT_TYPE_SLIDER type:

PARAMETERS

local_axis_a - The local translation unit axis in bodyA.

reference_angle - The constrained angle between the bodies: bodyB_angle - bodyA_angle.

enable_limit - Enable/disable the joint limit.

lower_translation - The lower translation limit, usually in meters.

upper_translation - The upper translation limit, usually in meters.

enable_motor - Enable/disable the joint motor.

max_motor_force - The maximum motor torque, usually in N-m.

motor_speed - The desired motor speed in radians per second.

joint_translation - READ ONLYCurrent joint translation, usually in meters. (Read only field, available from physics.get_joint_properties())

joint_speed - READ ONLYCurrent joint translation speed, usually in meters per second. (Read only field, available from physics.get_joint_properties())


physics.JOINT_TYPE_WELD

weld joint type

The following properties are available when connecting a joint of JOINT_TYPE_WELD type:

PARAMETERS

reference_angle - READ ONLYThe bodyB angle minus bodyA angle in the reference state (radians).

frequency - The mass-spring-damper frequency in Hertz. Rotation only. Disable softness with a value of 0.

damping - The damping ratio. 0 = no damping, 1 = critical damping.


physics.JOINT_TYPE_WHEEL

wheel joint type

The following properties are available when connecting a joint of JOINT_TYPE_WHEEL type:

PARAMETERS

local_axis_a - The local translation unit axis in bodyA.

max_motor_torque - The maximum motor torque used to achieve the desired motor speed. Usually in N-m.

motor_speed - The desired motor speed in radians per second.

enable_motor - Enable/disable the joint motor.

frequency - The mass-spring-damper frequency in Hertz. Rotation only. Disable softness with a value of 0.

damping - The spring damping ratio. 0 = no damping, 1 = critical damping.

joint_translation - READ ONLYCurrent joint translation, usually in meters. (Read only field, available from physics.get_joint_properties())

joint_speed - READ ONLYCurrent joint translation speed, usually in meters per second. (Read only field, available from physics.get_joint_properties())


mass

number collision object mass

READ ONLY Returns the defined physical mass of the collision object component as a number.

EXAMPLES

How to query a collision object component's mass:

-- get mass from collision object component "boulder"
local mass = go.get("#boulder", "mass")
-- do something useful
assert(mass > 1)


linear_velocity

vector3 collision object linear velocity

The current linear velocity of the collision object component as a vector3. The velocity is measured in units/s (pixels/s).

EXAMPLES

How to query and modify a collision object component's linear velocity:

-- get linear velocity from collision object "collisionobject" in gameobject "ship"
local source = "ship#collisionobject"
local velocity = go.get(source, "linear_velocity")
-- decrease it by 10%
go.set(source, "linear_velocity", velocity * 0.9)
-- apply the velocity on target game object "boulder"'s collision object as a force
local target = "boulder#collisionobject"
local pos = go.get_position(target)
msg.post(target, "apply_force", { force = velocity, position = pos })


angular_velocity

vector3 collision object angular velocity

The current angular velocity of the collision object component as a vector3. The velocity is measured as a rotation around the vector with a speed equivalent to the vector length in radians/s.

EXAMPLES

How to query and modify a collision object component's angular velocity:

-- get angular velocity from collision object "collisionobject" in gameobject "boulder"
local velocity = go.get("boulder#collisionobject", "angular_velocity")
-- do something interesting
if velocity.z < 0 then
    -- clockwise rotation
    ...
else
    -- counter clockwise rotation
    ...
end
-- decrease it by 10%
velocity.z = velocity.z * 0.9
go.set("boulder#collisionobject", "angular_velocity", velocity * 0.9)


linear_damping

number collision object linear damping

The linear damping value for the collision object. Setting this value alters the damping of linear motion of the object. Valid values are between 0 (no damping) and 1 (full damping).

EXAMPLES

How to increase a collision object component's linear damping:

-- get linear damping from collision object "collisionobject" in gameobject "floater"
local target = "floater#collisionobject"
local damping = go.get(target, "linear_damping")
-- increase it by 10% if it's below 0.9
if damping <= 0.9 then
    go.set(target, "linear_damping", damping * 1.1)
end


angular_damping

number collision object angular damping

The angular damping value for the collision object. Setting this value alters the damping of angular motion of the object (rotation). Valid values are between 0 (no damping) and 1 (full damping).

EXAMPLES

How to decrease a collision object component's angular damping:

-- get angular damping from collision object "collisionobject" in gameobject "floater"
local target = "floater#collisionobject"
local damping = go.get(target, "angular_damping")
-- decrease it by 10%
go.set(target, "angular_damping", damping * 0.9)


physics.raycast_async(from, to, groups, [request_id])

requests a ray cast to be performed

Ray casts are used to test for intersections against collision objects in the physics world. Collision objects of types kinematic, dynamic and static are tested against. Trigger objects do not intersect with ray casts. Which collision objects to hit is filtered by their collision groups and can be configured through groups. The actual ray cast will be performed during the physics-update.

PARAMETERS

from - the world position of the start of the ray

to - the world position of the end of the ray

groups - a lua table containing the hashed groups for which to test collisions against

[request_id] - a number between [0,-255]. It will be sent back in the response for identification, 0 by default

EXAMPLES

How to perform a ray cast asynchronously:

function init(self)
    self.my_groups = {hash("my_group1"), hash("my_group2")}
end

function update(self, dt)
    -- request ray cast
    physics.raycast_async(my_start, my_end, self.my_groups)
end

function on_message(self, message_id, message, sender)
    -- check for the response
    if message_id == hash("ray_cast_response") then
        -- act on the hit
    elseif message_id == hash("ray_cast_missed") then
        -- act on the miss
    end
end


physics.raycast(from, to, groups, options)

requests a ray cast to be performed

Ray casts are used to test for intersections against collision objects in the physics world. Collision objects of types kinematic, dynamic and static are tested against. Trigger objects do not intersect with ray casts. Which collision objects to hit is filtered by their collision groups and can be configured through groups.

PARAMETERS

from - the world position of the start of the ray

to - the world position of the end of the ray

groups - a lua table containing the hashed groups for which to test collisions against

options - a lua table containing options for the raycast.

all
boolean Set to true to return all ray cast hits. If false, it will only return the closest hit.

RETURN

result - It returns a list. If missed it returns nil. See ray_cast_response for details on the returned values.

EXAMPLES

How to perform a ray cast synchronously:

function init(self)
    self.groups = {hash("world"), hash("enemy")}
end

function update(self, dt)
    -- request ray cast
    local result = physics.raycast(from, to, self.groups, {all=true})
    if result ~= nil then
        -- act on the hit (see 'ray_cast_response')
        for _,result in ipairs(results) do
            handle_result(result)
        end
    end
end


physics.create_joint(joint_type, collisionobject_a, joint_id, position_a, collisionobject_b, position_b, [properties])

create a physics joint

Create a physics joint between two collision object components. Note: Currently only supported in 2D physics.

PARAMETERS

joint_type - the joint type

collisionobject_a - first collision object

joint_id - id of the joint

position_a - local position where to attach the joint on the first collision object

collisionobject_b - second collision object

position_b - local position where to attach the joint on the second collision object

[properties] - optional joint specific properties table See each joint type for possible properties field. The one field that is accepted for all joint types is: - boolean collide_connected: Set this flag to true if the attached bodies should collide.


physics.destroy_joint(collisionobject, joint_id)

destroy a physics joint

Destroy an already physics joint. The joint has to be created before a destroy can be issued. Note: Currently only supported in 2D physics.

PARAMETERS

collisionobject - collision object where the joint exist

joint_id - id of the joint


physics.get_joint_properties(collisionobject, joint_id)

get properties for a joint

Get a table for properties for a connected joint. The joint has to be created before properties can be retrieved. Note: Currently only supported in 2D physics.

PARAMETERS

collisionobject - collision object where the joint exist

joint_id - id of the joint

RETURN

properties - properties table. See the joint types for what fields are available, the only field available for all types is:


physics.set_joint_properties(collisionobject, joint_id, properties)

set properties for a joint

Updates the properties for an already connected joint. The joint has to be created before properties can be changed. Note: Currently only supported in 2D physics.

PARAMETERS

collisionobject - collision object where the joint exist

joint_id - id of the joint

properties - joint specific properties table Note: The collide_connected field cannot be updated/changed after a connection has been made.


physics.get_joint_reaction_force(collisionobject, joint_id)

get the reaction force for a joint

Get the reaction force for a joint. The joint has to be created before the reaction force can be calculated. Note: Currently only supported in 2D physics.

PARAMETERS

collisionobject - collision object where the joint exist

joint_id - id of the joint

RETURN

force - reaction force for the joint


physics.get_joint_reaction_torque(collisionobject, joint_id)

get the reaction torque for a joint

Get the reaction torque for a joint. The joint has to be created before the reaction torque can be calculated. Note: Currently only supported in 2D physics.

PARAMETERS

collisionobject - collision object where the joint exist

joint_id - id of the joint

RETURN

torque - the reaction torque on bodyB in N*m.


physics.set_gravity(gravity)

set the gravity for collection

Set the gravity in runtime. The gravity change is not global, it will only affect the collection that the function is called from. Note: For 2D physics the z component of the gravity vector will be ignored.

PARAMETERS

gravity - the new gravity vector

EXAMPLES

function init(self)
    -- Set "upside down" gravity for this collection.
    physics.set_gravity(vmath.vector3(0, 10.0, 0))
end


physics.get_gravity()

get the gravity for collection

Get the gravity in runtime. The gravity returned is not global, it will return the gravity for the collection that the function is called from. Note: For 2D physics the z component will always be zero.

RETURN

gravity - gravity vector of collection

EXAMPLES

function init(self)
    local gravity = physics.get_gravity()
    -- Inverse gravity!
    gravity = -gravity
    physics.set_gravity(gravity)
end


physics.set_hflip(url, flip)

flip the geometry horizontally for a collision object

Flips the collision shapes horizontally for a collision object

PARAMETERS

url - the collision object that should flip its shapes

flip - true if the collision object should flip its shapes, false if not

EXAMPLES

function init(self)
    self.fliph = true -- set on some condition
    physics.set_hflip("#collisionobject", self.fliph)
end


physics.set_vflip(url, flip)

flip the geometry vertically for a collision object

Flips the collision shapes vertically for a collision object

PARAMETERS

url - the collision object that should flip its shapes

flip - true if the collision object should flip its shapes, false if not

EXAMPLES

function init(self)
    self.flipv = true -- set on some condition
    physics.set_vflip("#collisionobject", self.flipv)
end


physics.wakeup(url)

explicitly wakeup a collision object

Collision objects tend to fall asleep when inactive for a small period of time for efficiency reasons. This function wakes them up.

PARAMETERS

url - the collision object to wake.

function on_input(self, action_id, action)
    if action_id == hash("test") and action.pressed then
        physics.wakeup("#collisionobject")
    end
end


physics.set_group(url, group)

change the group of a collision object

Updates the group property of a collision object to the specified string value. The group name should exist i.e. have been used in a collision object in the editor.

PARAMETERS

url - the collision object affected.

group - the new group name to be assigned.

local function change_collision_group()
     physics.set_group("#collisionobject", "enemy")
end


physics.get_group(url)

returns the group of a collision object

Returns the group name of a collision object as a hash.

PARAMETERS

url - the collision object to return the group of.

RETURN

group - hash value of the group.

local function check_is_enemy()
    local group = physics.get_group("#collisionobject")
    return group == hash("enemy")
end


physics.set_maskbit(url, group, maskbit)

updates the mask of a collision object

Sets or clears the masking of a group (maskbit) in a collision object.

PARAMETERS

url - the collision object to change the mask of.

group - the name of the group (maskbit) to modify in the mask.

maskbit - boolean value of the new maskbit. 'true' to enable, 'false' to disable.

local function make_invincible()
    -- no longer collide with the "bullet" group
    physics.set_maskbit("#collisionobject", "bullet", false)
end


physics.get_maskbit(url, group)

checks the presense of a group in the mask (maskbit) of a collision object

Returns true if the specified group is set in the mask of a collision object, false otherwise.

PARAMETERS

url - the collision object to check the mask of.

group - the name of the group to check for.

RETURN

maskbit - boolean value of the maskbit. 'true' if present, 'false' otherwise.

local function is_invincible()
    -- check if the collisionobject would collide with the "bullet" group
    local invincible = physics.get_maskbit("#collisionobject", "bullet")
    return invincible
end


physics.get_shape(url, shape)

get collision shape info

Gets collision shape data from a collision object

PARAMETERS

url - the collision object.

shape - the name of the shape to get data for.

RETURN

table - A table containing meta data about the physics shape

type
number The shape type. Supported values:
The returned table contains different fields depending on which type the shape is. If the shape is a sphere:
diameter
number the diameter of the sphere shape
If the shape is a box:
dimensions
vector3 a vmath.vector3 of the box dimensions
If the shape is a capsule:
diameter
number the diameter of the capsule poles
height
number the height of the capsule
local function get_shape_meta()
    local sphere = physics.get_shape("#collisionobject", "my_sphere_shape")
    -- returns a table with sphere.diameter
    return sphere
end


physics.set_shape(url, shape, table)

set collision shape data

Sets collision shape data for a collision object. Please note that updating data in 3D can be quite costly for box and capsules. Because of the physics engine, the cost comes from having to recreate the shape objects when certain shapes needs to be updated.

PARAMETERS

url - the collision object.

shape - the name of the shape to get data for.

table - the shape data to update the shape with. See physics.get_shape for a detailed description of each field in the data table.

local function set_shape_data()
    -- set capsule shape data
    local data = {}
    data.diameter = 10
    data.height = 20
    physics.set_shape("#collisionobject", "my_capsule_shape", data)

    -- set sphere shape data
    data = {}
    data.diameter = 10
    physics.set_shape("#collisionobject", "my_sphere_shape", data)

    -- set box shape data
    data = {}
    data.dimensions = vmath.vector3(10, 10, 5)
    physics.set_shape("#collisionobject", "my_box_shape", data)
end


physics.set_listener(callback)

sets a physics world event listener. If a function is set, physics messages will no longer be sent.

sets a physics world event listener. If a function is set, physics messages will no longer be sent.

PARAMETERS

callback - A callback that receives information about all the physics interactions in this physics world.

self
object The calling script
event
constant The type of event. Can be one of these messages:
data
table The callback value data is a table that contains event-related data. See the documentation for details on the messages.

EXAMPLES

local function physics_world_listener(self, event, data)
  if event == hash("contact_point_event") then
    pprint(data)
    -- {
    --  distance = 0.0714111328125,
    --  applied_impulse = 310.00769042969,
    --  a = {
    --      position = vmath.vector3(446, 371, 0),
    --      relative_velocity = vmath.vector3(1.1722083854693e-06, -20.667181015015, -0),
    --      mass = 0,
    --      group = hash: [default],
    --      id = hash: [/flat],
    --      normal = vmath.vector3(-0, -1, -0)
    --  },
    --  b = {
    --      position = vmath.vector3(185, 657.92858886719, 0),
    --      relative_velocity = vmath.vector3(-1.1722083854693e-06, 20.667181015015, 0),
    --      mass = 10,
    --      group = hash: [default],
    --      id = hash: [/go2],
    --      normal = vmath.vector3(0, 1, 0)
    --  }
    -- }
  elseif event == hash("collision_event") then
    pprint(data)
    -- {
    --  a = {
    --          group = hash: [default],
    --          position = vmath.vector3(183, 666, 0),
    --          id = hash: [/go1]
    --      },
    --  b = {
    --          group = hash: [default],
    --          position = vmath.vector3(185, 704.05865478516, 0),
    --          id = hash: [/go2]
    --      }
    -- }
  elseif event ==  hash("trigger_event") then
    pprint(data)
    -- {
    --  enter = true,
    --  b = {
    --      group = hash: [default],
    --      id = hash: [/go2]
    --  },
    --  a = {
    --      group = hash: [default],
    --      id = hash: [/go1]
    --  }
    -- },
  elseif event ==  hash("ray_cast_response") then
    pprint(data)
    --{
    --  group = hash: [default],
    --  request_id = 0,
    --  position = vmath.vector3(249.92222595215, 249.92222595215, 0),
    --  fraction = 0.68759721517563,
    --  normal = vmath.vector3(0, 1, 0),
    --  id = hash: [/go]
    -- }
  elseif event ==  hash("ray_cast_missed") then
    pprint(data)
    -- {
    --  request_id = 0
    --},
  end
end

function init(self)
    physics.set_listener(physics_world_listener)
end


physics.update_mass(collisionobject, mass)

updates the mass of a dynamic 2D collision object in the physics world.

The function recalculates the density of each shape based on the total area of all shapes and the specified mass, then updates the mass of the body accordingly. Note: Currently only supported in 2D physics.

PARAMETERS

collisionobject - the collision object whose mass needs to be updated.

mass - the new mass value to set for the collision object.

EXAMPLES

 physics.update_mass("#collisionobject", 14)


apply_force

applies a force on a collision object

Post this message to a collision-object-component to apply the specified force on the collision object. The collision object must be dynamic.

PARAMETERS

force - the force to be applied on the collision object, measured in Newton

position - the position where the force should be applied

EXAMPLES

Assuming the instance of the script has a collision-object-component with id "co":

-- apply a force of 1 Newton towards world-x at the center of the game object instance
msg.post("#co", "apply_force", {force = vmath.vector3(1, 0, 0), position = go.get_world_position()})


collision_response

reports a collision between two collision objects

This message is broadcasted to every component of an instance that has a collision object, when the collision object collides with another collision object. For a script to take action when such a collision happens, it should check for this message in its on_message callback function. This message only reports that a collision actually happened and will only be sent once per colliding pair and frame. To retrieve more detailed information, check for the contact_point_response instead.

PARAMETERS

other_id - the id of the instance the collision object collided with

other_position - the world position of the instance the collision object collided with

other_group - the collision group of the other collision object

own_group - the collision group of the own collision object

EXAMPLES

How to take action when a collision occurs:

function on_message(self, message_id, message, sender)
    -- check for the message
    if message_id == hash("collision_response") then
        -- take action
    end
end


contact_point_response

reports a contact point between two collision objects

This message is broadcasted to every component of an instance that has a collision object, when the collision object has contact points with respect to another collision object. For a script to take action when such contact points occur, it should check for this message in its on_message callback function. Since multiple contact points can occur for two colliding objects, this message can be sent multiple times in the same frame for the same two colliding objects. To only be notified once when the collision occurs, check for the collision_response message instead.

PARAMETERS

position - world position of the contact point

normal - normal in world space of the contact point, which points from the other object towards the current object

relative_velocity - the relative velocity of the collision object as observed from the other object

distance - the penetration distance between the objects, which is always positive

applied_impulse - the impulse the contact resulted in

life_time - life time of the contact, not currently used

mass - the mass of the current collision object in kg

other_mass - the mass of the other collision object in kg

other_id - the id of the instance the collision object is in contact with

other_position - the world position of the other collision object

other_group - the collision group of the other collision object

own_group - the collision group of the own collision object

EXAMPLES

How to take action when a contact point occurs:

function on_message(self, message_id, message, sender)
    -- check for the message
    if message_id == hash("contact_point_response") then
        -- take action
    end
end


trigger_response

reports interaction (enter/exit) between a trigger collision object and another collision object

This message is broadcasted to every component of an instance that has a collision object, when the collision object interacts with another collision object and one of them is a trigger. For a script to take action when such an interaction happens, it should check for this message in its on_message callback function. This message only reports that an interaction actually happened and will only be sent once per colliding pair and frame. To retrieve more detailed information, check for the contact_point_response instead.

PARAMETERS

other_id - the id of the instance the collision object collided with

enter - if the interaction was an entry or not

other_group - the collision group of the triggering collision object

own_group - the collision group of the own collision object

EXAMPLES

How to take action when a trigger interaction occurs:

function on_message(self, message_id, message, sender)
    -- check for the message
    if message_id == hash("trigger_response") then
        if message.enter then
            -- take action for entry
        else
            -- take action for exit
        end
    end
end


ray_cast_response

reports a ray cast hit

This message is sent back to the sender of a ray_cast_request, or to the physics world listener if it is set (see physics.set_listener), if the ray hits a collision object. See physics.raycast_async for examples of how to use it.

PARAMETERS

fraction - the fraction of the hit measured along the ray, where 0 is the start of the ray and 1 is the end

position - the world position of the hit

normal - the normal of the surface of the collision object where it was hit

id - the instance id of the hit collision object

group - the collision group of the hit collision object as a hashed name

request_id - id supplied when the ray cast was requested


ray_cast_missed

reports a ray cast miss

This message is sent back to the sender of a ray_cast_request, or to the physics world listener if it is set (see physics.set_listener), if the ray didn't hit any collision object. See physics.raycast_async for examples of how to use it.

PARAMETERS

request_id - id supplied when the ray cast was requested


contact_point_event

reports a contact point between two collision objects in cases where a listener is specified.

See physics.set_listener. This message is sent to a function specified in physics.set_listener when a collision object has contact points with another collision object. Since multiple contact points can occur for two colliding objects, this event can be sent multiple times in the same frame for the same two colliding objects. To only be notified once when the collision occurs, check for the collision_event event instead.

PARAMETERS

applied_impulse - the impulse the contact resulted in

distance - the penetration distance between the objects, which is always positive

a - contact point information for object A

position
vector3 The world position of object A
id
hash The ID of object A
group
hash The collision group of object A
relative_velocity
vector3 The relative velocity of the collision object A as observed from B object
mass
number The mass of the collision object A in kg
normal
vector3 normal in world space of the contact point, which points from B object towards A object

b - contact point information for object B

position
vector3 The world position of object B
id
hash The ID of object B
group
hash The collision group of object B
relative_velocity
vector3 The relative velocity of the collision object B as observed from A object
mass
number The mass of the collision object B in kg
normal
vector3 normal in world space of the contact point, which points from A object towards B object

EXAMPLES

How to take action when a contact point occurs:

physics.set_listener(function(self, event, data)
 if event == hash("contact_point_event") then
     pprint(data)
     -- {
     --  applied_impulse = 310.00769042969,
     --  distance = 0.0714111328125,
     --  a = {
     --      position = vmath.vector3(446, 371, 0),
     --      relative_velocity = vmath.vector3(1.1722083854693e-06, -20.667181015015, -0),
     --      mass = 0,
     --      group = hash: [default],
     --      id = hash: [/flat],
     --      normal = vmath.vector3(-0, -1, -0)
     --  },
     --  b = {
     --      position = vmath.vector3(185, 657.92858886719, 0),
     --      relative_velocity = vmath.vector3(-1.1722083854693e-06, 20.667181015015, 0),
     --      mass = 10,
     --      group = hash: [default],
     --      id = hash: [/go2],
     --      normal = vmath.vector3(0, 1, 0)
     --  },
     -- }
  end
end)


collision_event

reports a collision between two collision objects in cases where a listener is specified.

See physics.set_listener. This message is sent to a function specified in physics.set_listener when two collision objects collide. This message only reports that a collision has occurred and will be sent once per frame and per colliding pair. For more detailed information, check for the contact_point_event.

PARAMETERS

a - collision information for object A

position
vector3 The world position of object A
id
hash The ID of object A
group
hash The collision group of object A

b - collision information for object B

position
vector3 The world position of object B
id
hash The ID of object B
group
hash The collision group of object B

EXAMPLES

How to take action when a collision occurs:

physics.set_listener(function(self, event, data)
  if event == hash("collision_event") then
      pprint(data)
      -- {
      --  a = {
      --          group = hash: [default],
      --          position = vmath.vector3(183, 666, 0),
      --          id = hash: [/go1]
      --      },
      --  b = {
      --          group = hash: [default],
      --          position = vmath.vector3(185, 704.05865478516, 0),
      --          id = hash: [/go2]
      --      }
      -- }
  end
end)


trigger_event

reports interaction (enter/exit) between a trigger collision object and another collision object

See physics.set_listener. This message is sent to a function specified in physics.set_listener when a collision object interacts with another collision object and one of them is a trigger. This message only reports that an interaction actually happened and will be sent once per colliding pair and frame. For more detailed information, check for the contact_point_event.

PARAMETERS

enter - if the interaction was an entry or not

a -

interaction information for object A
id
hash The ID of object A
group
hash The collision group of object A

b - collision information for object B

id
hash The ID of object B
group
hash The collision group of object B

EXAMPLES

How to take action when a trigger interaction occurs:

physics.set_listener(function(self, event, data)
 if event ==  hash("trigger_event") then
     if data.enter then
        -- take action for entry
     else
        -- take action for exit
     end
     pprint(data)
     -- {
     --  enter = true,
     --  b = {
     --      group = hash: [default],
     --      id = hash: [/go2]
     --  },
     --  a = {
     --      group = hash: [default],
     --      id = hash: [/go1]
     --  }
     -- },
  end
end)