wiki.sine.space | sinespace

Difference between revisions of "Scripting/SPhysics"

From wiki.sine.space
Jump to: navigation, search
Line 1: Line 1:
 
The SPhysics class allows you to interact with the physics scene. See also [[Scripting/SRigidbody]].
 
The SPhysics class allows you to interact with the physics scene. See also [[Scripting/SRigidbody]].
 +
  
 
==Members==
 
==Members==
{{ScriptFunction|SPhysicsHit|RayCast[]|(SVector origin, SVector normal, float distance);|Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)}}
+
{{ScriptFunction|SPhysicsHit|RayCast[]|(SVector origin, SVector normal, float distance);|Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)|5=
{{ScriptFunction|SPhysicsHit|SphereCast[]|(SVector origin, float radius, float distance);|Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects}}
+
local trans=Space.Host.ExecutingObject<br>
{{ScriptFunction|SPhysicsHit|CapsuleCast[]|(SVector origin, SVector end, float radius, float distance);|Sweeps a capsule from origin to end, radius wide and returns the list of collided objects}}
+
function Raycast()<br>
{{ScriptFunction|SPhysicsHit|BoxCast[]|(SVector origin, SVector halfExtents, SVector direction, SQuaternion orientation, float distance);|Sweeps a box defined by origin+halfExtents along directiojn, distance meters with a orientation matching orientation - and returns the collisions in distance order.}}
+
&nbsp;&nbsp;&nbsp;&nbsp;local rays = Space.Physics.RayCast(trans.WorldPosition,trans.Forward,50)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;if(rays~=nil and #rays>0) then<br>
 +
for i=0,#rays - 1 do<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;Space.Log(rays[i].Object.Name.." i = "..i)<br>
 +
end<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;end<br>
 +
end<br>
 +
trans.OnUpdate(Raycast)<br>
 +
''Raycasts from origin in direction normal.''
 +
}}
 +
 
 +
{{ScriptFunction|SPhysicsHit|RayCastSingle|(SVector origin, SVector normal, float distance);|Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)|5=
 +
local trans=Space.Host.ExecutingObject<br>
 +
function RaycastSingle()<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local ray=Space.Physics.RayCastSingle(trans.WorldPosition,trans.Forward,50)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;if(ray~=nil and ray.ContainsHit==true) then<br>
 +
Space.Log(ray.Object.Name)
 +
&nbsp;&nbsp;&nbsp;&nbsp;end<br>
 +
end<br>
 +
trans.OnUpdate(RaycastSingle)<br>
 +
''Returns single raycast hit from origin in direction normal.''
 +
}}
 +
 
 +
{{ScriptFunction|SPhysicsHit|SphereCast[]|(SVector origin, float radius, float distance);|Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects|5=
 +
local trans=Space.Host.ExecutingObject<br>
 +
function SphereRaycast()<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local rays=Space.Physics.SphereCast(center,10,10,trans.Forward)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;if rays~=nil and #rays>0 then<br>
 +
for i=0,#rays - 1 do<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;Space.Log(rays[i].Object.Name.." i = "..i)<br>
 +
end<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;end<br>
 +
end<br>
 +
trans.OnUpdate(SphereRaycast)<br>
 +
}}
 +
 
 +
{{ScriptFunction|SPhysicsHit|CapsuleCast[]|(SVector origin, SVector end, float radius, float distance);|Sweeps a capsule from origin to end, radius wide and returns the list of collided objects.|5=
 +
local trans=Space.Host.ExecutingObject<br>
 +
function CapsuleCast()<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local startp=trans.WorldPosition<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local endp=startp+trans.Up*10<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local rays=Space.Physics.CapsuleCast(startp,endp,1,10,trans.Up)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;if rays~=nil and #rays>0 then<br>
 +
for i=0,#rays - 1 do<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;Space.Log(rays[i].Object.Name.." i = "..i)<br>
 +
end<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;end<br>
 +
end<br>
 +
trans.OnUpdate(CapsuleCast)
 +
}}
 +
 
 +
{{ScriptFunction|SPhysicsHit|BoxCast[]|(SVector origin, SVector halfExtents, SVector direction, SQuaternion orientation, float distance);|Sweeps a box defined by origin+halfExtents along directiojn, distance meters with a orientation matching orientation - and returns the collisions in distance order.
 +
|5=local trans=Space.Host.ExecutingObject<br>
 +
function BoxCast()<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local endp=local extents=Vector.new(2,2,2)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;local rays=Space.Physics.BoxCast(center,extents,trans.Forward,Quaternion.Identity,2)<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;if rays~=nil and #rays>0 then<br>
 +
for i=0,#rays - 1 do<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;Space.Log(rays[i].Object.Name.." i = "..i)<br>
 +
end<br>
 +
&nbsp;&nbsp;&nbsp;&nbsp;end<br>
 +
end<br>
 +
trans.OnUpdate(BoxCast)
 +
}}
 +
 
 +
 
  
 
{{Scripting Navbox}}
 
{{Scripting Navbox}}

Revision as of 08:09, 22 December 2020

The SPhysics class allows you to interact with the physics scene. See also Scripting/SRigidbody.


Members

RayCast[]

SPhysicsHit RayCast[] (SVector origin, SVector normal, float distance);

Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)

local trans=Space.Host.ExecutingObject

function Raycast()
    local rays = Space.Physics.RayCast(trans.WorldPosition,trans.Forward,50)
    if(rays~=nil and #rays>0) then
for i=0,#rays - 1 do
    Space.Log(rays[i].Object.Name.." i = "..i)
end
    end
end
trans.OnUpdate(Raycast)

Raycasts from origin in direction normal.


RayCastSingle

SPhysicsHit RayCastSingle (SVector origin, SVector normal, float distance);

Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)

local trans=Space.Host.ExecutingObject

function RaycastSingle()
    local ray=Space.Physics.RayCastSingle(trans.WorldPosition,trans.Forward,50)
    if(ray~=nil and ray.ContainsHit==true) then
Space.Log(ray.Object.Name)     end
end
trans.OnUpdate(RaycastSingle)

Returns single raycast hit from origin in direction normal.


SphereCast[]

SPhysicsHit SphereCast[] (SVector origin, float radius, float distance);

Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects

local trans=Space.Host.ExecutingObject

function SphereRaycast()
    local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)
    local rays=Space.Physics.SphereCast(center,10,10,trans.Forward)
    if rays~=nil and #rays>0 then
for i=0,#rays - 1 do
    Space.Log(rays[i].Object.Name.." i = "..i)
end
    end
end

trans.OnUpdate(SphereRaycast)


CapsuleCast[]

SPhysicsHit CapsuleCast[] (SVector origin, SVector end, float radius, float distance);

Sweeps a capsule from origin to end, radius wide and returns the list of collided objects.

local trans=Space.Host.ExecutingObject

function CapsuleCast()
    local startp=trans.WorldPosition
    local endp=startp+trans.Up*10
    local rays=Space.Physics.CapsuleCast(startp,endp,1,10,trans.Up)
    if rays~=nil and #rays>0 then
for i=0,#rays - 1 do
    Space.Log(rays[i].Object.Name.." i = "..i)
end
    end
end

trans.OnUpdate(CapsuleCast)


BoxCast[]

SPhysicsHit BoxCast[] (SVector origin, SVector halfExtents, SVector direction, SQuaternion orientation, float distance);

Sweeps a box defined by origin+halfExtents along directiojn, distance meters with a orientation matching orientation - and returns the collisions in distance order.


local trans=Space.Host.ExecutingObject

function BoxCast()
    local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)
    local endp=local extents=Vector.new(2,2,2)
    local rays=Space.Physics.BoxCast(center,extents,trans.Forward,Quaternion.Identity,2)
    if rays~=nil and #rays>0 then
for i=0,#rays - 1 do
    Space.Log(rays[i].Object.Name.." i = "..i)
end
    end
end

trans.OnUpdate(BoxCast)