Ordering physics rayTest returned list instead of reversing it.
Added raw results ray tests too.
This commit is contained in:
parent
513eedaea1
commit
4cd424ad03
@ -781,18 +781,25 @@ public class PhysicsSpace {
|
|||||||
public void removeCollisionGroupListener(int collisionGroup) {
|
public void removeCollisionGroupListener(int collisionGroup) {
|
||||||
collisionGroupListeners.remove(collisionGroup);
|
collisionGroupListeners.remove(collisionGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a ray collision test and returns the results as a list of
|
* Performs a ray collision test and returns the results as a list of
|
||||||
* PhysicsRayTestResults
|
* PhysicsRayTestResults ordered by it hitFraction (lower to higher)
|
||||||
*/
|
*/
|
||||||
public List rayTest(Vector3f from, Vector3f to) {
|
public List rayTest(Vector3f from, Vector3f to) {
|
||||||
LinkedList<PhysicsRayTestResult> results = new LinkedList<PhysicsRayTestResult>();
|
LinkedList<PhysicsRayTestResult> results = new LinkedList<PhysicsRayTestResult>();
|
||||||
rayTest(from, to, results);
|
rayTest(from, to, results);
|
||||||
|
|
||||||
if(results.getFirst().getHitFraction() > results.getLast().getHitFraction()) {
|
return results;
|
||||||
Collections.reverse(results);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Performs a ray collision test and returns the results as a list of
|
||||||
|
* PhysicsRayTestResults without performing any sort operation
|
||||||
|
*/
|
||||||
|
public List rayTestRaw(Vector3f from, Vector3f to) {
|
||||||
|
LinkedList<PhysicsRayTestResult> results = new LinkedList<PhysicsRayTestResult>();
|
||||||
|
rayTestRaw(from, to, results);
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
@ -814,13 +821,33 @@ public class PhysicsSpace {
|
|||||||
return rayTestFlags;
|
return rayTestFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Comparator<PhysicsRayTestResult> hitFractionComparator = new Comparator<PhysicsRayTestResult>() {
|
||||||
|
@Override
|
||||||
|
public int compare(PhysicsRayTestResult r1, PhysicsRayTestResult r2) {
|
||||||
|
float comp = r1.getHitFraction() - r2.getHitFraction();
|
||||||
|
return comp > 0 ? 1 : -1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a ray collision test and returns the results as a list of
|
* Performs a ray collision test and returns the results as a list of
|
||||||
* PhysicsRayTestResults
|
* PhysicsRayTestResults ordered by it hitFraction (lower to higher)
|
||||||
*/
|
*/
|
||||||
public List<PhysicsRayTestResult> rayTest(Vector3f from, Vector3f to, List<PhysicsRayTestResult> results) {
|
public List<PhysicsRayTestResult> rayTest(Vector3f from, Vector3f to, List<PhysicsRayTestResult> results) {
|
||||||
results.clear();
|
results.clear();
|
||||||
rayTest_native(from, to, physicsSpaceId, results, rayTestFlags);
|
rayTest_native(from, to, physicsSpaceId, results, rayTestFlags);
|
||||||
|
|
||||||
|
Collections.sort(results, hitFractionComparator);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a ray collision test and returns the results as a list of
|
||||||
|
* PhysicsRayTestResults without performing any sort operation
|
||||||
|
*/
|
||||||
|
public List<PhysicsRayTestResult> rayTestRaw(Vector3f from, Vector3f to, List<PhysicsRayTestResult> results) {
|
||||||
|
results.clear();
|
||||||
|
rayTest_native(from, to, physicsSpaceId, results, rayTestFlags);
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user