Merge pull request #26153 from godotengine/revert-26111-areaopti
Revert "Optimized area check"
This commit is contained in:
commit
258bc03857
@ -650,6 +650,7 @@ void SpaceBullet::check_ghost_overlaps() {
|
|||||||
/// Algorithm support variables
|
/// Algorithm support variables
|
||||||
btCollisionShape *other_body_shape;
|
btCollisionShape *other_body_shape;
|
||||||
btConvexShape *area_shape;
|
btConvexShape *area_shape;
|
||||||
|
btGjkPairDetector::ClosestPointInput gjk_input;
|
||||||
AreaBullet *area;
|
AreaBullet *area;
|
||||||
int x(-1), i(-1), y(-1), z(-1), indexOverlap(-1);
|
int x(-1), i(-1), y(-1), z(-1), indexOverlap(-1);
|
||||||
|
|
||||||
@ -703,6 +704,10 @@ void SpaceBullet::check_ghost_overlaps() {
|
|||||||
btTransform area_shape_treansform(area->get_bt_shape_transform(y));
|
btTransform area_shape_treansform(area->get_bt_shape_transform(y));
|
||||||
area_shape_treansform.getOrigin() *= area_scale;
|
area_shape_treansform.getOrigin() *= area_scale;
|
||||||
|
|
||||||
|
gjk_input.m_transformA =
|
||||||
|
area->get_transform__bullet() *
|
||||||
|
area_shape_treansform;
|
||||||
|
|
||||||
area_shape = static_cast<btConvexShape *>(area->get_bt_shape(y));
|
area_shape = static_cast<btConvexShape *>(area->get_bt_shape(y));
|
||||||
|
|
||||||
// For each other object shape
|
// For each other object shape
|
||||||
@ -716,35 +721,45 @@ void SpaceBullet::check_ghost_overlaps() {
|
|||||||
btTransform other_shape_transform(otherObject->get_bt_shape_transform(z));
|
btTransform other_shape_transform(otherObject->get_bt_shape_transform(z));
|
||||||
other_shape_transform.getOrigin() *= other_body_scale;
|
other_shape_transform.getOrigin() *= other_body_scale;
|
||||||
|
|
||||||
btCollisionObjectWrapper obA(
|
gjk_input.m_transformB =
|
||||||
NULL,
|
otherObject->get_transform__bullet() *
|
||||||
area_shape,
|
other_shape_transform;
|
||||||
area->get_bt_ghost(),
|
|
||||||
area->get_transform__bullet() * area_shape_treansform,
|
|
||||||
-1,
|
|
||||||
y);
|
|
||||||
btCollisionObjectWrapper obB(
|
|
||||||
NULL,
|
|
||||||
other_body_shape,
|
|
||||||
otherObject->get_bt_collision_object(),
|
|
||||||
otherObject->get_transform__bullet() * other_shape_transform,
|
|
||||||
-1,
|
|
||||||
z);
|
|
||||||
|
|
||||||
btCollisionAlgorithm *algorithm = dispatcher->findAlgorithm(&obA, &obB, NULL, BT_CONTACT_POINT_ALGORITHMS);
|
if (other_body_shape->isConvex()) {
|
||||||
|
|
||||||
if (!algorithm)
|
btPointCollector result;
|
||||||
continue;
|
btGjkPairDetector gjk_pair_detector(
|
||||||
|
area_shape,
|
||||||
|
static_cast<btConvexShape *>(other_body_shape),
|
||||||
|
gjk_simplex_solver,
|
||||||
|
gjk_epa_pen_solver);
|
||||||
|
gjk_pair_detector.getClosestPoints(gjk_input, result, 0);
|
||||||
|
|
||||||
GodotDeepPenetrationContactResultCallback contactPointResult(&obA, &obB);
|
if (0 >= result.m_distance) {
|
||||||
algorithm->processCollision(&obA, &obB, dynamicsWorld->getDispatchInfo(), &contactPointResult);
|
hasOverlap = true;
|
||||||
|
goto collision_found;
|
||||||
|
}
|
||||||
|
|
||||||
algorithm->~btCollisionAlgorithm();
|
} else {
|
||||||
dispatcher->freeCollisionAlgorithm(algorithm);
|
|
||||||
|
|
||||||
if (contactPointResult.hasHit()) {
|
btCollisionObjectWrapper obA(NULL, area_shape, area->get_bt_ghost(), gjk_input.m_transformA, -1, y);
|
||||||
hasOverlap = true;
|
btCollisionObjectWrapper obB(NULL, other_body_shape, otherObject->get_bt_collision_object(), gjk_input.m_transformB, -1, z);
|
||||||
goto collision_found;
|
|
||||||
|
btCollisionAlgorithm *algorithm = dispatcher->findAlgorithm(&obA, &obB, NULL, BT_CONTACT_POINT_ALGORITHMS);
|
||||||
|
|
||||||
|
if (!algorithm)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
GodotDeepPenetrationContactResultCallback contactPointResult(&obA, &obB);
|
||||||
|
algorithm->processCollision(&obA, &obB, dynamicsWorld->getDispatchInfo(), &contactPointResult);
|
||||||
|
|
||||||
|
algorithm->~btCollisionAlgorithm();
|
||||||
|
dispatcher->freeCollisionAlgorithm(algorithm);
|
||||||
|
|
||||||
|
if (contactPointResult.hasHit()) {
|
||||||
|
hasOverlap = true;
|
||||||
|
goto collision_found;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // ~For each other object shape
|
} // ~For each other object shape
|
||||||
|
Loading…
Reference in New Issue
Block a user