feat(scripting): expose PhysX rigidbody and raycast APIs
This commit is contained in:
60
managed/XCEngine.ScriptCore/Physics.cs
Normal file
60
managed/XCEngine.ScriptCore/Physics.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
namespace XCEngine
|
||||
{
|
||||
public static class Physics
|
||||
{
|
||||
public static bool Raycast(Vector3 origin, Vector3 direction)
|
||||
{
|
||||
RaycastHit hit;
|
||||
return Raycast(origin, direction, out hit, float.MaxValue);
|
||||
}
|
||||
|
||||
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance)
|
||||
{
|
||||
RaycastHit hit;
|
||||
return Raycast(origin, direction, out hit, maxDistance);
|
||||
}
|
||||
|
||||
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit)
|
||||
{
|
||||
return Raycast(origin, direction, out hit, float.MaxValue);
|
||||
}
|
||||
|
||||
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit, float maxDistance)
|
||||
{
|
||||
hit = default(RaycastHit);
|
||||
|
||||
if (float.IsNaN(maxDistance) || maxDistance <= 0.0f)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (float.IsPositiveInfinity(maxDistance))
|
||||
{
|
||||
maxDistance = float.MaxValue;
|
||||
}
|
||||
|
||||
bool hasHit = InternalCalls.Physics_Raycast(
|
||||
ref origin,
|
||||
ref direction,
|
||||
maxDistance,
|
||||
out ulong hitGameObjectUUID,
|
||||
out Vector3 hitPoint,
|
||||
out Vector3 hitNormal,
|
||||
out float hitDistance,
|
||||
out int hitIsTrigger);
|
||||
|
||||
if (!hasHit)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
hit = new RaycastHit(
|
||||
hitGameObjectUUID,
|
||||
hitPoint,
|
||||
hitNormal,
|
||||
hitDistance,
|
||||
hitIsTrigger != 0);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user