sm.physics
Contains functions regarding the physics engine.
Constants
filter
Value type: table
Collision filter types
{
dynamicBody,
staticBody,
character,
areaTrigger,
joints,
terrainSurface,
terrainAsset,
harvestable,
areaTrigger,
static,
default,
all,
allTerrain,
}
types
Value type: table
Physics types are used to define an object's characteristics is in the physics world. Upon a raycast or collision detection, these types are used to find out what object was intersected.
{
"invalid", -- No object.
"terrainSurface", -- The ground.
"terrainAsset", -- Trees and boulders.
"lift", -- A Lift.
"body", -- A Body.
"character", -- A Character.
"joint", -- A Joint.
"harvestable", -- A Harvestable.
"vision", -- A collision area used by sensors.
}
Server + Client
applyImpulse - Shape
sm.physics.applyImpulse( target, impulse, worldSpace, offset )
Applies an impulse to a Shape, changing its velocity immediately. The impulse is applied to the shape's centerpoint with an optional offset.
Parameters:
| Name | Type | Description |
|---|---|---|
target |
Shape | The object on which the impulse is exerted on. |
impulse |
Vec3 | The direction and strength of the impulse. |
worldSpace (optional) |
boolean | Whether the impulse is applied in world space coordinates. (Defaults to local rotation) |
offset (optional) |
Vec3 | The offset from the center point. (Defaults to no offset) |
applyImpulse - Body
sm.physics.applyImpulse( target, impulse, worldSpace, offset )
Applies an impulse to a Body, changing its velocity immediately. The impulse is applied to the body's center of mass with an optional offset.
Parameters:
| Name | Type | Description |
|---|---|---|
target |
Body | The object on which the impulse is exerted on. |
impulse |
Vec3 | The direction and strength of the impulse. |
worldSpace (optional) |
boolean | Whether the impulse is applied in world space coordinates. (Defaults to local rotation) |
offset (optional) |
Vec3 | The offset from the center point. (Defaults to no offset) |
applyImpulse - Character
sm.physics.applyImpulse( target, impulse )
Applies an impulse to a Character, changing its velocity immediately. The impulse is applied to the character's centerpoint.
Parameters:
| Name | Type | Description |
|---|---|---|
target |
Character | The character on which the impulse is exerted on. |
impulse |
Vec3 | The direction and strength of the impulse. |
applyTorque
sm.physics.applyTorque( target, torque, worldSpace )
Applies a torque impulse to a Body, changing its angular velocity immediately. The torque is applied along the body's center of mass, making it rotate.
Parameters:
| Name | Type | Description |
|---|---|---|
target |
Body | The object on which the torque is exerted on. |
torque |
Vec3 | The direction and strength of the torque. |
worldSpace (optional) |
boolean | Whether the torque is applied in world space coordinates. (Defaults to local rotation) |
capsuleContactCount
sm.physics.capsuleContactCount( from, to, radius, mask )
Returns the number of collision objects that are found inside a given capsule.
The capsule is formed by connecting two spheres.
Parameters:
| Name | Type | Description |
|---|---|---|
from |
Vec3 | The world position of the first sphere. |
to |
Vec3 | The world position of the second sphere. |
radius |
number | The radius of the spheres. |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default (Optional) |
Returns:
| Type | Description |
|---|---|
| integer | The number of objects. |
capsuleHasContact
sm.physics.capsuleHasContact( from, to, radius, mask )
Returns true if any collision object is found inside a given capsule.
Faster than capsuleContactCount when only checking for existence.
The capsule is formed by connecting two spheres.
Parameters:
| Name | Type | Description |
|---|---|---|
from |
Vec3 | The world position of the first sphere. |
to |
Vec3 | The world position of the second sphere. |
radius |
number | The radius of the spheres. |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default (Optional) |
Returns:
| Type | Description |
|---|---|
| boolean | True if any contact was found. |
capsulecast
sm.physics.capsulecast(
start,
end,
radius,
height,
ignore,
mask,
world,
ignoreUuids
)
Performs a capsule ray cast (Z-axis aligned) between two positions.
The returned RaycastResult contains information about any object intersected by the ray.
If the ray cast is called from within a shape (e.g. a Sensor), a Body may be provided which the ray will not intersect.
Parameters:
| Name | Type | Description |
|---|---|---|
start |
Vec3 | The start position. |
end |
Vec3 | The end position. |
radius |
number | The radius of the capsule. |
height |
number | The height of the cylindrical part of the capsule. |
ignore (optional) |
Body|Shape|Harvestable|Character|AreaTrigger | An object to be ignored. (Optional) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default (Optional) |
world (optional) |
World | The world to perform the cast in. (Optional) |
ignoreUuids (optional) |
table | A table of uuids {Uuid, ...} of Shape, Harvestable or Character type to be ignored. (Optional) |
Returns:
| Type | Description |
|---|---|
| boolean | True if raycast was successful |
| RaycastResult | The raycast result data. |
distanceRaycast
sm.physics.distanceRaycast( start, direction )
Performs a distance ray cast from a position with a given direction.
Note: sm.physics.distanceRaycast is generally cheaper to use than sm.physics.raycast as it performs collision checks in a simplified world. If the raycast is only used for checking collision, it is advised to use this method instead.
Parameters:
Returns:
| Type | Description |
|---|---|
| boolean | 2 values: whether raycast was successful |
| number | the fraction (0–1) of the distance reached until collision divided by the ray's length. |
getBoxContacts
sm.physics.getBoxContacts( pos, rotation, halfExtents, world, mask )
Returns a table of the game objects that are found inside the given box
Parameters:
| Name | Type | Description |
|---|---|---|
pos |
Vec3 | The world position of the box center. |
rotation |
Quat | The rotation of the box. |
halfExtents |
Vec3 | The half extents of the box. |
world |
World | The world to search in. (optional) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.static and sm.physics.filter.dynamicBody and sm.physics.filter.character (Optional) |
Returns:
| Type | Description |
|---|---|
| table | The table with tables of objects found inside the box. { bodies={Body, ..}, characters={Character, ..}, harvestables={Harvestable, ..}, lifts={Lift, ..} } |
getGroundMaterial
sm.physics.getGroundMaterial( worldPosition )
Returns the material at the given position in the terrain.
Parameters:
| Name | Type | Description |
|---|---|---|
worldPosition |
Vec3 | The world position to check the material at. |
Returns:
| Type | Description |
|---|---|
| string | The material name. |
getMaterialId
sm.physics.getMaterialId( materialName )
Returns the material id from name
Parameters:
| Name | Type | Description |
|---|---|---|
materialName |
string | Material name. |
Returns:
| Type | Description |
|---|---|
| integer | The id of the material. |
getShapeContactsInBox
sm.physics.getShapeContactsInBox( position, rotation, halfExtents, world )
Returns a table of all shapes colliding with a given box.
Parameters:
| Name | Type | Description |
|---|---|---|
position |
Vec3 | The center position of the box. |
rotation |
Quat | The rotation of the box. |
halfExtents |
Vec3 | The halved size of the box. |
world |
World | The world to search in. (optional) |
Returns:
getShapeContactsInSphere
sm.physics.getShapeContactsInSphere( center, radius, world )
Returns a table of all shapes colliding with a given sphere.
Parameters:
| Name | Type | Description |
|---|---|---|
center |
Vec3 | The center position of the sphere. |
radius |
number | The radius of the sphere. |
world |
World | The world to search in. (optional) |
Returns:
getSphereContacts
sm.physics.getSphereContacts( pos, radius, world, mask )
Returns a table of the game objects that are found inside the given sphere
Parameters:
| Name | Type | Description |
|---|---|---|
pos |
Vec3 | The world position of the sphere. |
radius |
number | The radius of the sphere. |
world (optional) |
World | The world to search in. Defaults to current world (Optional) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.static and sm.physics.filter.dynamicBody and sm.physics.filter.character (Optional) |
Returns:
| Type | Description |
|---|---|
| table | The table with tables of objects found inside the sphere. { bodies={Body, ..}, characters={Character, ..}, harvestables={Harvestable, ..}, lifts={Lift, ..} } |
isPointInLiquid
sm.physics.isPointInLiquid( position, world )
Returns whether a point is in a liquid or not.
Parameters:
| Name | Type | Description |
|---|---|---|
position |
Vec3 | The world position to check. |
world (optional) |
World | The world to check in. |
Returns:
| Type | Description |
|---|---|
| boolean | Whether the point is inside liquid or not |
isSphereHittingLiquid
sm.physics.isSphereHittingLiquid( position, world, radius )
Returns whether a sphere is hitting a liquid or not.
Parameters:
| Name | Type | Description |
|---|---|---|
position |
Vec3 | The world position to check. |
world (optional) |
World | The world to check in. |
radius |
number | The radius of the sphere. |
Returns:
| Type | Description |
|---|---|
| boolean | Whether the sphere is hitting a liquid or not |
multicast
sm.physics.multicast( casts, world )
Performs multiple sphere and/or raycasts given a table of parameters.
Type can be "sphere" or "ray". Radius is ignored for rays.
ignoreUuids option is a table of uuids {Uuid, ...} of Shape, Harvestable or Character type to be ignored.
Parameters:
| Name | Type | Description |
|---|---|---|
casts |
table | Table of casts. { type=string, startPoint=Vec3, endPoint=Vec3, radius=number, mask=sm.physics.filter, ignoreUuids=table } |
world (optional) |
World | The world to perform the cast in. (Optional) |
Returns:
| Type | Description |
|---|---|
| table | Array of pairs of boolean and RaycastResult. {{boolean, RaycastResult}, ..} |
raycast
sm.physics.raycast( start, end, body, mask, world, ignoreUuids )
Performs a ray cast between two positions.
The returned RaycastResult contains information about any object intersected by the ray.
If the ray cast is called from within a shape (e.g. a Sensor), a Body may be provided which the ray will not intersect.
Parameters:
| Name | Type | Description |
|---|---|---|
start |
Vec3 | The start position. |
end |
Vec3 | The end position. |
body (optional) |
Body | The body to be ignored. (Optional) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default (Optional) |
world (optional) |
World | The world to perform the raycast in. (Optional) |
ignoreUuids (optional) |
table | A table of uuids {Uuid, ...} of Shape, Harvestable or Character type to be ignored. (Optional) |
Returns:
| Type | Description |
|---|---|
| boolean | True if raycast was successful |
| RaycastResult | The raycast result data. |
raycastTarget
sm.physics.raycastTarget( start, end, body, world, ignoreUuids )
Performs a ray cast between two positions to find a specific target.
a Body must be provided as a target.
The returned RaycastResult contains information about any object intersected by the ray.
Parameters:
| Name | Type | Description |
|---|---|---|
start |
Vec3 | The start position. |
end |
Vec3 | The end position. |
body |
Body | The body to be exclusively checked. |
world (optional) |
World | The world to perform the raycast in. (Optional) |
ignoreUuids (optional) |
table | A table of uuids {Uuid, ...} of Shape, Harvestable or Character type to be ignored. (Optional) |
Returns:
| Type | Description |
|---|---|
| boolean | True if raycast was successful |
| RaycastResult | The raycast result data. |
sphereContactCount
sm.physics.sphereContactCount(
worldPosition,
radius,
includeTerrain,
countWater,
mask
)
Returns the number of collision objects that are found inside the given sphere
Parameters:
| Name | Type | Description |
|---|---|---|
worldPosition |
Vec3 | The world position of the sphere. |
radius |
number | The radius of the sphere. |
includeTerrain (optional) |
boolean | True if terrain should be included in the test (Defaults to false) |
countWater (optional) |
boolean | True if water should be included (Defaults to false) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default. Using this will override "includeTerrain" and "countWater". (Optional) |
Returns:
| Type | Description |
|---|---|
| integer | The number of objects. |
sphereHasContact
sm.physics.sphereHasContact(
worldPosition,
radius,
includeTerrain,
countWater,
mask
)
Returns true if any collision object is found inside the given sphere.
Faster than sphereContactCount when only checking for existence.
Parameters:
| Name | Type | Description |
|---|---|---|
worldPosition |
Vec3 | The world position of the sphere. |
radius |
number | The radius of the sphere. |
includeTerrain (optional) |
boolean | True if terrain should be included in the test (Defaults to false) |
countWater (optional) |
boolean | True if water should be included (Defaults to false) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default. Using this will override "includeTerrain" and "countWater". (Optional) |
Returns:
| Type | Description |
|---|---|
| boolean | True if any contact was found. |
spherecast
sm.physics.spherecast(
start,
end,
radius,
ignore,
mask,
world,
ignoreUuids
)
Performs a spherical ray cast between two positions.
The returned RaycastResult contains information about any object intersected by the ray.
If the ray cast is called from within a shape (e.g. a Sensor), a Body may be provided which the ray will not intersect.
Parameters:
| Name | Type | Description |
|---|---|---|
start |
Vec3 | The start position. |
end |
Vec3 | The end position. |
radius |
number | The radius of the sphere. |
ignore (optional) |
Body|Shape|Harvestable|Character|AreaTrigger | An object to be ignored. (Optional) |
mask (optional) |
integer | The collision mask. Defaults to sm.physics.filter.default (Optional) |
world (optional) |
World | The world to perform the cast in. (Optional) |
ignoreUuids (optional) |
table | A table of uuids {Uuid, ...} of Shape, Harvestable or Character type to be ignored. (Optional) |
Returns:
| Type | Description |
|---|---|
| boolean | True if raycast was successful |
| RaycastResult | The raycast result data. |
Server-only
explode
sm.physics.explode(
position,
level,
destructionRadius,
impulseRadius,
magnitude,
effectName,
ignoreShape,
parameters,
world,
damage,
source,
type
)
Creates an explosion at given position. The explosion creates a shockwave that is capable of destroying blocks and pushing characters and creations away.
Shapes that are within the explosion's destruction radius may receive the event server_onExplosionHit.
Note: The destruction level is the damage effect on blocks and parts, determining how likely it is that they are destroyed. This is related to the
qualityLevelfound in parts json-files. Any quality level equal to or less than the destruction level may be destroyed. The effect fades one level every half travelled of the remaining destruction radius. A quality level of 0 means a block or part is indestructible.
Parameters:
| Name | Type | Description |
|---|---|---|
position |
Vec3 | The center point of the explosion. |
level |
integer | The destruction level affecting nearby objects. |
destructionRadius |
number | The destruction radius. Objects inside this sphere may be destroyed. |
impulseRadius |
number | The impulse radius. Objects inside this sphere are affected by an impulse. |
magnitude |
number | The impulse strength of the explosion. The strength diminishes with distance. |
effectName (optional) |
string | The name of the effect to be played upon explosion. (Optional) |
ignoreShape (optional) |
Shape | The shape to be ignored. (Optional) |
parameters (optional) |
table | The table containing the parameters for the effect. (Optional) |
world (optional) |
World | The world to cause the explosion in. (Optional) |
damage (optional) |
integer | The damage of the explosion. Defaults to 2 * destruction level (Optional) |
source (optional) |
userdata | The source of the explosion. Defaults to none (Optional) |
type (optional) |
Uuid | The explosionType. Defaults to nil uuid (Optional) |
getGravity
sm.physics.getGravity( )
Returns the gravitational acceleration affecting shapes and bodies.
Returns:
| Type | Description |
|---|---|
| number | The gravitational value. |
setGravity
sm.physics.setGravity( gravity )
Sets the gravitational acceleration affecting shapes and bodies.
Parameters:
| Name | Type | Description |
|---|---|---|
gravity |
number | The gravitational value. |