sm.physics
Contains functions regarding the physics engine.
Constants:
Functions:
sm.physics.filter table
Collision filter types
dynamicBody |
staticBody |
character |
areaTrigger |
joints |
terrainSurface |
terrainAsset |
harvestable |
areaTrigger |
static |
default |
all |
sm.physics.types 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. |
sm.physics.applyImpulse(target, impulse, worldSpace=false, offset=nil)
Applies an impulse to a Shape, changing its velocity immediately. The impulse is applied to the shape's centerpoint with an optional offset.
Parameters:
Type | Name | Description |
---|---|---|
Shape | target | The object on which the impulse is exerted on. |
Vec3 | impulse | The direction and strength of the impulse. |
boolean | worldSpace=false | Whether the impulse is applied in world space coordinates. (Defaults to local rotation) |
Vec3 | offset=nil | The offset from the center point. (Defaults to no offset) |
sm.physics.applyImpulse(target, impulse, worldSpace=false, offset=nil)
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:
Type | Name | Description |
---|---|---|
Body | target | The object on which the impulse is exerted on. |
Vec3 | impulse | The direction and strength of the impulse. |
boolean | worldSpace=false | Whether the impulse is applied in world space coordinates. (Defaults to local rotation) |
Vec3 | offset=nil | The offset from the center point. (Defaults to no offset) |
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:
Type | Name | Description |
---|---|---|
Character | target | The character on which the impulse is exerted on. |
Vec3 | impulse | The direction and strength of the impulse. |
sm.physics.applyTorque(target, torque, worldSpace=false)
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:
Type | Name | Description |
---|---|---|
Body | target | The object on which the torque is exerted on. |
Vec3 | torque | The direction and strength of the torque. |
boolean | worldSpace=false | Whether the torque is applied in world space coordinates. (Defaults to local rotation) |
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:
Type | Name | Description |
---|---|---|
Vec3 | start | The start position. |
Vec3 | direction | The ray's direction and length. |
Returns:
Type | Description |
---|---|
boolean, number | 2 values: whether raycast was successful; the fraction (0–1) of the distance reached until collision divided by the ray's length. |
sm.physics.explode(position, level, destructionRadius, impulseRadius, magnitude, effectName=nil, ignoreShape=nil, parameters=nil)
Server only
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 `qualityLevel` found 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:
Type | Name | Description |
---|---|---|
Vec3 | position | The center point of the explosion. |
integer | level | The destruction level affecting nearby objects. |
number | destructionRadius | The destruction radius. Objects inside this sphere may be destroyed. |
number | impulseRadius | The impulse radius. Objects inside this sphere are affected by an impulse. |
number | magnitude | The impulse strength of the explosion. The strength diminishes with distance. |
string | effectName=nil | The name of the effect to be played upon explosion. (Optional) |
Shape | ignoreShape=nil | The shape to be ignored. (Optional) |
table | parameters=nil | The table containing the parameters for the effect. (Optional) |
sm.physics.getGravity()
Server only
Returns the gravitational acceleration affecting shapes and bodies.
Returns:
Type | Description |
---|---|
number | The gravitational value. |
sm.physics.getGroundMaterial(worldPosition)
Returns the material at the given position in the terrain.
Parameters:
Type | Name | Description |
---|---|---|
Vec3 | worldPosition | The world position to check the material at. |
Returns:
Type | Description |
---|---|
string | The material name. |
sm.physics.getSphereContacts(pos, radius)
Server only
Returns a table of the game objects that are found inside the given sphere
Parameters:
Type | Name | Description |
---|---|---|
Vec3 | pos | The world position of the sphere. |
number | radius | The radius of the sphere. |
Returns:
Type | Description |
---|---|
table | The table with tables of objects found inside the sphere. { bodies={Body, ..}, characters={Character, ..}, harvestables={Harvestable, ..}, lifts={Lift, ..} } |
sm.physics.multicast(casts)
Performs multiple sphere and/or raycasts given a table of parameters.
Type can be "sphere" or "ray". Radius is ignored for rays.
Parameters:
Type | Name | Description |
---|---|---|
table | casts | Table of casts. { type=string, startPoint=Vec3, endPoint=Vec3, radius=number, mask=sm.physics.filter } |
Returns:
Type | Description |
---|---|
table | Array of pairs of boolean and RaycastResult. {{boolean, RaycastResult}, ..} |
sm.physics.raycast(start, end, body=nil, mask=nil)
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:
Type | Name | Description |
---|---|---|
Vec3 | start | The start position. |
Vec3 | end | The end position. |
Body | body=nil | The body to be ignored. (Optional) |
integer | mask=nil | The collision mask. Defaults to sm.physics.filter.default (Optional) |
Returns:
Type | Description |
---|---|
boolean, RaycastResult | True if raycast was successful; The raycast result data. |
sm.physics.raycastTarget(start, end, body)
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:
Type | Name | Description |
---|---|---|
Vec3 | start | The start position. |
Vec3 | end | The end position. |
Body | body | The body to be exclusively checked. |
Returns:
Type | Description |
---|---|
boolean, RaycastResult | True if raycast was successful; The raycast result data. |
sm.physics.setGravity(gravity)
Server only
Sets the gravitational acceleration affecting shapes and bodies.
Parameters:
Type | Name | Description |
---|---|---|
number | gravity | The gravitational value. |
sm.physics.sphereContactCount(worldPosition, radius, includeTerrain=false, countWater=false)
Returns the number of collision objects that are found inside the given sphere
Parameters:
Type | Name | Description |
---|---|---|
Vec3 | worldPosition | The world position of the sphere. |
number | radius | The radius of the sphere. |
boolean | includeTerrain=false | True if terrain should be included in the test |
boolean | countWater=false | True if water should be included |
Returns:
Type | Description |
---|---|
integer | The number of objects. |
sm.physics.spherecast(start, end, radius, body=nil, mask=nil)
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:
Type | Name | Description |
---|---|---|
Vec3 | start | The start position. |
Vec3 | end | The end position. |
number | radius | The radius of the sphere. |
Body | body=nil | The body to be ignored. (Optional) |
integer | mask=nil | The collision mask. Defaults to sm.physics.filter.default (Optional) |
Returns:
Type | Description |
---|---|
boolean, RaycastResult | True if raycast was successful; The raycast result data. |