Skip to content

Primitive3D

A base class for 3D nodes that are capable of using collision and/or being rendered.

Inheritance: * Node * Node3D


EnablePhysics

Whether this node should be physically simulated.

Sig: Primitive3D:EnablePhysics(enable) - Arg: boolean enable Enable physics simulation


EnableCollision

Whether this node should be collidable. Objects that have collision enabled will affect what objects simulating physics will interact with, as well as what objects can be hit when performing Sweep/Ray tests.

Sig: Primitive3D:EnableCollision(enable) - Arg: boolean enable Enable collision


EnableOverlaps

Whether this node should be able to trigger overlap events.

Sig: Primitive3D:EnableOverlaps(enable) - Arg: boolean enable Enable overlap events


IsPhysicsEnabled

Check whether physics simulation is enabled.

Sig: enabled = Primitive3D:IsPhysicsEnabled() - Ret: boolean enabled Is physics simulation enabled


IsCollisionEnabled

Check whether collision is enabled.

Sig: enabled = Primitive3D:IsCollisionEnabled() - Ret: boolean enabled Is collision enabled


AreOverlapsEnabled

Check whether overlap events are enabled.

Sig: enabled = Primitive3D:AreOverlapsEnabled() - Ret: boolean enabled Are overlap events enabled


GetMass

Get the mass of the node. Used for physics simulation only.

Sig: mass = Primitive3D:GetMass() - Ret: number mass Physical mass


GetLinearDamping

Get the linear damping of the node. Used by physics simulation to control how the node's linear velocity should change over time.

Sig: linearDamping = Primitive3D:GetLinearDamping() - Ret: number linearDamping Linear damping


GetAngularDamping

Get the angular damping of the node. Used by physics simulation to control how the node's angular velocity should change over time.

Sig: angularDamping = Primitive3D:GetAngularDamping() - Ret: number angularDamping Angular damping


GetRestitution

Get the node's restitution (i.e. bounciness). 0 restitution = no bounce. 1 restitution = never lose speed after collision. Going above 1 might result in some crazy interactions. Used by physics simulation.

Sig: restitution = Primitive3D:GetRestitution() - Ret: number restitution Restitution (bounciness)


GetFriction

Get the node's friction. Used by physics simulation.

Sig: friction = Primitive3D:GetFriction() - Ret: number friction Friction


GetRollingFriction

Get the node's rolling friction. Used by physics simulation.

Sig: rollingFriction = Primitive3D:GetRollingFriction() - Ret: number rollingFriction Rolling friction


GetLinearFactor

Get the node's linear factor, which controls what axes the node can move along. Used by physics simulation.

Sig: factor = Primitive3D:GetLinearFactor() - Ret: Vector factor Linear factor


GetAngularFactor

Get the node's angular factor, which controls what axes the node can move along. Used by physics simulation.

Sig: factor = Primitive3D:GetAngularFactor() - Ret: Vector factor Angular factor


GetCollisionGroup

Get the collision group of this node. The collision group is used in conjunction with the collision mask to determine which nodes can collide with each other (or overlap). There are only 8 collision groups because they are stored within one byte of data (0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80). It's possible for a node to be assigned to multiple groups by taking the "bitwise or" of multiple groups (e.g. 0x03 = groups 0x01 and 0x02).

Sig: group = Primitive3D:GetCollisionGroup() - Ret: integer group Collision group


GetCollisionMask

Get this node's collision mask. The collision group is used in conjunction with the collision mask to determine which nodes can collide with each other (or overlap). Given two nodes nodeA and nodeB, they will overlap and collide only if nodeA:GetCollisionMask() & nodeB:GetCollisionGroup() and nodeB:GetCollisionMask() & nodeA:GetCollisionGroup().

Sig: mask = Primitive3D:GetCollisionMask() - Ret: integer mask Collision mask


SetMass

Set the mass of the node. Used for physics simulation only.

Sig: Primitive3D:SetMass(mass) - Arg: number mass Physical mass


SetLinearDamping

Set the linear damping of the node. Used by physics simulation to control how the node's linear velocity should change over time.

Sig: Primitive3D:SetLinearDamping(linearDamping) - Arg: number linearDamping Linear damping


SetAngularDamping

Set the angular damping of the node. Used by physics simulation to control how the node's angular velocity should change over time.

Sig: Primitive3D:SetAngularDamping(angularDamping) - Arg: number angularDamping Angular damping


SetRestitution

Set the node's restitution (i.e. bounciness). 0 restitution = no bounce. 1 restitution = never lose speed after collision. Going above 1 might result in some crazy interactions. Used by physics simulation.

Sig: Primitive3D:SetRestitution(restitution) - Arg: number restitution Restitution (bounciness)


SetFriction

Set the node's friction. Used by physics simulation.

Sig: Primitive3D:SetFriction(friction) - Arg: number friction Friction


SetRollingFriction

Set the node's rolling friction. Used by physics simulation.

Sig: Primitive3D:SetRollingFriction(rollingFriction) - Arg: number rollingFriction Rolling friction


SetLinearFactor

Set the node's linear factor, which controls what axes the node can move along. Used by physics simulation.

Sig: Primitive3D:SetLinearFactor(factor) - Arg: Vector factor Linear factor


SetAngularFactor

Set the node's angular factor, which controls what axes the node can move along. Used by physics simulation.

Sig: Primitive3D:SetAngularFactor(factor) - Arg: Vector factor Angular factor


SetCollisionGroup

Set the collision group of this node. The collision group is used in conjunction with the collision mask to determine which nodes can collide with each other (or overlap). There are only 8 collision groups because they are stored within one byte of data (0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80). It's possible for a node to be assigned to multiple groups by taking the "bitwise or" of multiple groups (e.g. 0x03 = groups 0x01 and 0x02).

Sig: Primitive3D:SetCollisionGroup(group) - Arg: integer group Collision group


SetCollisionMask

Set this node's collision mask. The collision group is used in conjunction with the collision mask to determine which nodes can collide with each other (or overlap). Given two nodes nodeA and nodeB, they will overlap and collide only if nodeA:GetCollisionMask() & nodeB:GetCollisionGroup() and nodeB:GetCollisionMask() & nodeA:GetCollisionGroup().

Sig: Primitive3D:SetCollisionMask(mask) - Arg: integer mask Collision mask


GetLinearVelocity

Get the node's current linear velocity.

Sig: velocity = Primitive3D:GetLinearVelocity() - Ret: Vector velocity Linear velocity


GetAngularVelocity

Get the node's current angular velocity.

Sig: velocity = Primitive3D:GetAngularVelocity() - Ret: Vector velocity Angular velocity


AddLinearVelocity

Add linear velocity. Only used by physics simulation.

Sig: Primitive3D:AddLinearVelocity(velocity) - Arg: Vector velocity Linear velocity


AddAngularVelocity

Add angular velocity. Only used by physics simulation.

Sig: Primitive3D:AddAngularVelocity(velocity) - Arg: Vector velocity Angular velocity


SetLinearVelocity

Set the linear velocity. Only used by physics simulation.

Sig: Primitive3D:SetLinearVelocity(velocity) - Arg: Vector velocity Linear velocity


SetAngularVelocity

Set angular velocity. Only used by physics simulation.

Sig: Primitive3D:SetAngularVelocity(velocity) - Arg: Vector velocity Angular velocity


AddForce

Add a force to this node. Only used by physics simulation.

Sig: Primitive3D:AddForce(force) - Arg: Vector force Force


AddImpulse

Add an impulse to this node. Only used by physics simulation.

Sig: Primitive3D:AddImpulse(impulse) - Arg: Vector impulse Impulse


ClearForces

Clear all forces affecting this node. Only used by physics simulation.

Sig: Primitive3D:ClearForces()


EnableCastShadows

Set whether this node should cast shadows. Projected shadows are only supported on Vulkan and aren't implemented yet.

Sig: Primitive3D:EnableCastShadows(enable) - Arg: boolean enable Enable shadow casting


ShouldCastShadows

Check whether this node is set to cast shadows. Projected shadows are only supported on Vulkan and aren't implemented yet.

Sig: castShadows = Primitive3D:ShouldCastShadows() - Ret: boolean castShadows Should cast shadows


EnableReceiveShadows

Set whether this node should be affected by projected shadows. Projected shadows are only supported on Vulkan and aren't implemented yet.

Sig: Primitive3D:EnableReceiveShadows(enable) - Arg: boolean enable Enable shadow receiving


ShouldReceiveShadows

Check whether this node should be affected by projected shadows. Projected shadows are only supported on Vulkan and aren't implemented yet.

Sig: receiveShadows = Primitive3D:ShouldReceiveShadows() - Ret: boolean receiveShadows Should receive shadows


EnableReceiveSimpleShadows

Enable this node to receive simple shadows from ShadowMesh3D nodes. Simple shadows are supported on all platforms.

Sig: Primitive3D:EnableReceiveSimpleShadows(enable) - Arg: boolean enable Enable receiving simple shadows


ShouldReceiveSimpleShadows

Check whether this node should receive simple shadows from ShadowMesh3D nodes. Simple shadows are supported on all platforms.

Sig: receive = Primitive3D:ShouldReceiveSimpleShadows() - Ret: boolean receive Should receive simple shadows


GetLightingChannels

Get this node's lighting channels. Only lights on the same lighting channel will be able to light this node.

Sig: channels = Primitive3D:GetLightingChannels() - Ret: integer channels Lighting channels


SetLightingChannels

Set this node's lighting channels. Only lights on the same lighting channel will be able to light this node.

Sig: Primitive3D:SetLightingChannels(channels) - Arg: integer channels Lighting channels


SweepToWorldPosition

Sweep this node to a new position, stopping at the first collision along the way. Only this node's collision will be used for the sweep (no children). TODO: Add support for sweeping children as well.

Alias: SweepToPosition

Sig: result = Primitive3D:SweepToWorldPosition(position, mask=0, testOnly=false) - Arg: Vector position World position - Arg: integer mask Collision mask to use (if 0, use this node's collision mask) - Arg: bool testOnly If true, do not move the primitive and do not trigger OnCollision functions. - Ret: table result Result of the sweep test - Vector start - Vector end - Primitive3D hitNode - Vector hitNormal - Vector hitPosition - number hitFraction (0 to 1, how far along the sweep did we make it?)


GetBounds

Get the spherical bounds of the primitive. Bounds are used to determine what primitives will be rendered. The returned bounds are the post-transform, world-space bounds.

Sig: bounds = Primitive3D:GetBounds() - Ret: table bounds - Vector center Bounds center in world-space - number radius Bounds radius in world-space