Now returns object physics layer in shape cast result

This commit is contained in:
Antoine Pilote
2024-08-10 18:39:28 -04:00
parent 4dd1a4e6f7
commit e7d6ca19b0
4 changed files with 29 additions and 8 deletions

View File

@@ -233,6 +233,7 @@ namespace Nuake
return false;
}
}
};
BPLayerInterfaceImpl JoltBroadphaseLayerInterface = BPLayerInterfaceImpl();
@@ -522,6 +523,8 @@ namespace Nuake
JPH::ShapeCastSettings shapeCastSetting;
shapeCastSetting.mCollectFacesMode = JPH::ECollectFacesMode::CollectFaces;
shapeCastSetting.mUseShrunkenShapeAndConvexRadius = true;
_JoltPhysicsSystem->GetNarrowPhaseQuery().CastShape(ray, shapeCastSetting, JPH::Vec3(0, 0, 0), collector);
std::vector<ShapeCastResult> shapecastResults;
@@ -538,14 +541,16 @@ namespace Nuake
auto bodyId = static_cast<JPH::BodyID>(results[i].mBodyID2);
JPH::TransformedShape ts = _JoltPhysicsSystem->GetBodyInterface().GetTransformedShape(results[i].mBodyID2);
JPH::Vec3 surfaceNormal = ts.GetWorldSpaceSurfaceNormal(results[i].mSubShapeID2, results[i].mContactPointOn2);
auto layer = _JoltBodyInterface->GetObjectLayer(bodyId);
ShapeCastResult result
{
Vector3(hitPosition.GetX(), hitPosition.GetY(), hitPosition.GetZ()),
hitFraction,
Vector3(surfaceNormal.GetX(), surfaceNormal.GetY(), surfaceNormal.GetZ())
Vector3(surfaceNormal.GetX(), surfaceNormal.GetY(), surfaceNormal.GetZ()),
layer
};
shapecastResults.push_back(std::move(result));

View File

@@ -17,5 +17,6 @@ namespace Nuake
Vector3 ImpactPosition;
float Fraction;
Vector3 ImpactNormal;
float Layer;
};
}

View File

@@ -47,6 +47,7 @@ namespace Nuake {
results.push_back(hit.ImpactNormal.y);
results.push_back(hit.ImpactNormal.z);
results.push_back(hit.Fraction);
results.push_back(hit.Layer);
}
return Coral::Array<float>::New(results);

View File

@@ -92,6 +92,7 @@ namespace Nuake.Net
public Vector3 ImpactPosition;
public Vector3 ImpactNormal;
public float Fraction;
public Layers Layer;
}
public struct BoxInternal
{
@@ -106,6 +107,16 @@ namespace Nuake.Net
public float Height;
}
public enum Layers
{
NON_MOVING = 0,
MOVING = 1,
KINEMATIC = 2,
CHARACTER_GHOST = 3,
CHARACTER = 4,
SENSORS = 5
}
internal static unsafe delegate*<float, float, float, float, float, float, BoxInternal, NativeArray<float>> ShapeCastBoxIcall;
internal static unsafe delegate*<float, float, float, float, float, float, float, NativeArray<float>> ShapeCastSphereIcall;
internal static unsafe delegate*<float, float, float, float, float, float, CapsuleInternal, NativeArray<float>> ShapeCastCapsuleIcall;
@@ -125,7 +136,6 @@ namespace Nuake.Net
{
NativeArray<float> resultICall = ShapeCastBoxIcall(from.X, from.Y, from.Z, to.X, to.Y, to.Z, boxInternal);
for (int i = 0; i < resultICall.Length / 7; i++)
{
int index = i * 7;
@@ -133,7 +143,8 @@ namespace Nuake.Net
{
ImpactPosition = new Vector3(resultICall[index + 0], resultICall[index + 1], resultICall[index + 2]),
ImpactNormal = new Vector3(resultICall[index + 3], resultICall[index + 4], resultICall[index + 5]),
Fraction = resultICall[index + 6]
Fraction = resultICall[index + 6],
Layer = (Layers)resultICall[index + 7]
};
result.Add(shapeCastResult);
@@ -158,7 +169,8 @@ namespace Nuake.Net
{
ImpactPosition = new Vector3(resultICall[index + 0], resultICall[index + 1], resultICall[index + 2]),
ImpactNormal = new Vector3(resultICall[index + 3], resultICall[index + 4], resultICall[index + 5]),
Fraction = resultICall[index + 6]
Fraction = resultICall[index + 6],
Layer = (Layers)resultICall[index + 7]
};
result.Add(shapeCastResult);
@@ -189,7 +201,8 @@ namespace Nuake.Net
{
ImpactPosition = new Vector3(resultICall[index + 0], resultICall[index + 1], resultICall[index + 2]),
ImpactNormal = new Vector3(resultICall[index + 3], resultICall[index + 4], resultICall[index + 5]),
Fraction = resultICall[index + 6]
Fraction = resultICall[index + 6],
Layer = (Layers)resultICall[index + 7]
};
result.Add(shapeCastResult);
@@ -220,7 +233,8 @@ namespace Nuake.Net
{
ImpactPosition = new Vector3(resultICall[index + 0], resultICall[index + 1], resultICall[index + 2]),
ImpactNormal = new Vector3(resultICall[index + 3], resultICall[index + 4], resultICall[index + 5]),
Fraction = resultICall[index + 6]
Fraction = resultICall[index + 6],
Layer = (Layers)resultICall[index + 7]
};
result.Add(shapeCastResult);