summaryrefslogtreecommitdiff
path: root/servers/physics_2d
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2017-08-27 22:46:40 +0200
committerGitHub <noreply@github.com>2017-08-27 22:46:40 +0200
commit9e0fbb49c12a4bb12c275194b0599fdfa0b1aabf (patch)
tree8804d0dd24cc126087462edfbbbf73ed61b56b0e /servers/physics_2d
parent37da8155a4500a9386027b4d791a86186bc7ab4a (diff)
parent7ad14e7a3e6f87ddc450f7e34621eb5200808451 (diff)
Merge pull request #10699 from akien-mga/burn-burn-burn
Dead code tells no tales
Diffstat (limited to 'servers/physics_2d')
-rw-r--r--servers/physics_2d/collision_solver_2d_sat.cpp185
-rw-r--r--servers/physics_2d/joints_2d_sw.cpp118
-rw-r--r--servers/physics_2d/joints_2d_sw.h41
-rw-r--r--servers/physics_2d/shape_2d_sw.cpp1
-rw-r--r--servers/physics_2d/space_2d_sw.cpp16
5 files changed, 4 insertions, 357 deletions
diff --git a/servers/physics_2d/collision_solver_2d_sat.cpp b/servers/physics_2d/collision_solver_2d_sat.cpp
index b2363e30eb..bf8478d0b1 100644
--- a/servers/physics_2d/collision_solver_2d_sat.cpp
+++ b/servers/physics_2d/collision_solver_2d_sat.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "collision_solver_2d_sat.h"
+
#include "geometry.h"
struct _CollectorCallback2D {
@@ -89,124 +90,6 @@ _FORCE_INLINE_ static void _generate_contacts_edge_edge(const Vector2 *p_points_
ERR_FAIL_COND(p_point_count_B != 2); // circle is actually a 4x3 matrix
#endif
-#if 0
- Vector2 rel_A=p_points_A[1]-p_points_A[0];
- Vector2 rel_B=p_points_B[1]-p_points_B[0];
-
- Vector2 t = p_collector->normal.tangent();
-
- print_line("tangent: "+t);
-
- real_t dA[2]={t.dot(p_points_A[0]),t.dot(p_points_A[1])};
- Vector2 pA[2]={p_points_A[0],p_points_A[1]};
-
- if (dA[0]>dA[1]) {
- SWAP(dA[0],dA[1]);
- SWAP(pA[0],pA[1]);
- }
-
- real_t dB[2]={t.dot(p_points_B[0]),t.dot(p_points_B[1])};
- Vector2 pB[2]={p_points_B[0],p_points_B[1]};
- if (dB[0]>dB[1]) {
- SWAP(dB[0],dB[1]);
- SWAP(pB[0],pB[1]);
- }
-
-
- if (dA[0]<dB[0]) {
-
- Vector2 n = (p_points_A[1]-p_points_A[0]).normalized().tangent();
- real_t d = n.dot(p_points_A[1]);
-
- if (dA[1]>dB[1]) {
- //A contains B
- for(int i=0;i<2;i++) {
-
- Vector2 b = p_points_B[i];
- Vector2 a = n.plane_project(d,b);
- if (p_collector->normal.dot(a) > p_collector->normal.dot(b)-CMP_EPSILON)
- continue;
- p_collector->call(a,b);
-
- }
- } else {
-
- // B0,A1 containment
-
- Vector2 n_B = (p_points_B[1]-p_points_B[0]).normalized().tangent();
- real_t d_B = n_B.dot(p_points_B[1]);
-
- // first, B on A
-
- {
- Vector2 b = p_points_B[0];
- Vector2 a = n.plane_project(d,b);
- if (p_collector->normal.dot(a) < p_collector->normal.dot(b)-CMP_EPSILON)
- p_collector->call(a,b);
- }
-
- // second, A on B
-
- {
- Vector2 a = p_points_A[1];
- Vector2 b = n_B.plane_project(d_B,a);
- if (p_collector->normal.dot(a) < p_collector->normal.dot(b)-CMP_EPSILON)
- p_collector->call(a,b);
- }
-
-
-
- }
-
-
- } else {
-
- Vector2 n = (p_points_B[1]-p_points_B[0]).normalized().tangent();
- real_t d = n.dot(p_points_B[1]);
-
- if (dB[1]>dA[1]) {
- //B contains A
- for(int i=0;i<2;i++) {
-
- Vector2 a = p_points_A[i];
- Vector2 b = n.plane_project(d,a);
- if (p_collector->normal.dot(a) > p_collector->normal.dot(b)-CMP_EPSILON)
- continue;
- p_collector->call(a,b);
- }
- } else {
-
- // A0,B1 containment
- Vector2 n_A = (p_points_A[1]-p_points_A[0]).normalized().tangent();
- real_t d_A = n_A.dot(p_points_A[1]);
-
- // first A on B
-
- {
- Vector2 a = p_points_A[0];
- Vector2 b = n.plane_project(d,a);
- if (p_collector->normal.dot(a) < p_collector->normal.dot(b)-CMP_EPSILON)
- p_collector->call(a,b);
-
- }
-
- //second, B on A
-
- {
-
- Vector2 b = p_points_B[1];
- Vector2 a = n_A.plane_project(d_A,b);
- if (p_collector->normal.dot(a) < p_collector->normal.dot(b)-CMP_EPSILON)
- p_collector->call(a,b);
- }
-
- }
- }
-
-#endif
-
-#if 1
-
Vector2 n = p_collector->normal;
Vector2 t = n.tangent();
real_t dA = n.dot(p_points_A[0]);
@@ -246,38 +129,6 @@ _FORCE_INLINE_ static void _generate_contacts_edge_edge(const Vector2 *p_points_
p_collector->call(a, b);
}
}
-
-#elif 0
- Vector2 axis = rel_A.normalized(); //make an axis
- Vector2 axis_B = rel_B.normalized();
- if (axis.dot(axis_B) < 0)
- axis_B = -axis_B;
- axis = (axis + axis_B) * 0.5;
- Vector2 base_A = p_points_A[0] - axis * axis.dot(p_points_A[0]);
- Vector2 base_B = p_points_B[0] - axis * axis.dot(p_points_B[0]);
-
- //sort all 4 points in axis
- real_t dvec[4] = { axis.dot(p_points_A[0]), axis.dot(p_points_A[1]), axis.dot(p_points_B[0]), axis.dot(p_points_B[1]) };
-
- //todo , find max/min and then use 2 central points
- SortArray<real_t> sa;
- sa.sort(dvec, 4);
-
- //use the middle ones as contacts
- for (int i = 1; i <= 2; i++) {
-
- Vector2 a = base_A + axis * dvec[i];
- Vector2 b = base_B + axis * dvec[i];
- if (p_collector->normal.dot(a) > p_collector->normal.dot(b) - 0.01) {
- print_line("fail a: " + a);
- print_line("fail b: " + b);
- continue;
- }
- print_line("res a: " + a);
- print_line("res b: " + b);
- p_collector->call(a, b);
- }
-#endif
}
static void _generate_contacts_from_supports(const Vector2 *p_points_A, int p_point_count_A, const Vector2 *p_points_B, int p_point_count_B, _CollectorCallback2D *p_collector) {
@@ -504,37 +355,11 @@ public:
}
}
- /*
-
-
- print_line("**************************");
- printf("CBK: %p\n",callback->userdata);
- print_line("type A: "+itos(shape_A->get_type()));
- print_line("type B: "+itos(shape_B->get_type()));
- print_line("xform A: "+*transform_A);
- print_line("xform B: "+*transform_B);
- print_line("normal: "+best_axis);
- print_line("depth: "+rtos(best_depth));
- print_line("index: "+itos(best_axis_index));
-
- for(int i=0;i<support_count_A;i++) {
-
- print_line("A-"+itos(i)+": "+supports_A[i]);
- }
-
- for(int i=0;i<support_count_B;i++) {
-
- print_line("B-"+itos(i)+": "+supports_B[i]);
- }
-//*/
-
callback->normal = best_axis;
_generate_contacts_from_supports(supports_A, support_count_A, supports_B, support_count_B, callback);
if (callback && callback->sep_axis && *callback->sep_axis != Vector2())
*callback->sep_axis = Vector2(); //invalidate previous axis (no test)
- //CollisionSolver2DSW::CallbackResult cbk=NULL;
- //cbk(Vector2(),Vector2(),NULL);
}
_FORCE_INLINE_ SeparatorAxisTest2D(const ShapeA *p_shape_A, const Transform2D &p_transform_a, const ShapeB *p_shape_B, const Transform2D &p_transform_b, _CollectorCallback2D *p_collector, const Vector2 &p_motion_A = Vector2(), const Vector2 &p_motion_B = Vector2(), real_t p_margin_A = 0, real_t p_margin_B = 0) {
@@ -558,9 +383,6 @@ public:
};
/****** SAT TESTS *******/
-/****** SAT TESTS *******/
-/****** SAT TESTS *******/
-/****** SAT TESTS *******/
#define TEST_POINT(m_a, m_b) \
((!separator.test_axis(((m_a) - (m_b)).normalized())) || \
@@ -582,11 +404,6 @@ static void _collision_segment_segment(const Shape2DSW *p_a, const Transform2D &
return;
//this collision is kind of pointless
- /*
- if (!separator.test_previous_axis())
- return;
- */
-
if (!separator.test_cast())
return;
diff --git a/servers/physics_2d/joints_2d_sw.cpp b/servers/physics_2d/joints_2d_sw.cpp
index f4c8f9178d..897e145a3e 100644
--- a/servers/physics_2d/joints_2d_sw.cpp
+++ b/servers/physics_2d/joints_2d_sw.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "joints_2d_sw.h"
+
#include "space_2d_sw.h"
//based on chipmunk joint constraints
@@ -87,127 +88,12 @@ normal_relative_velocity(Body2DSW *a, Body2DSW *b, Vector2 rA, Vector2 rB, Vecto
return relative_velocity(a, b, rA, rB).dot(n);
}
-#if 0
-
-bool PinJoint2DSW::setup(real_t p_step) {
-
- Space2DSW *space = A->get_space();
- ERR_FAIL_COND_V(!space,false;)
- rA = A->get_transform().basis_xform(anchor_A);
- rB = B?B->get_transform().basis_xform(anchor_B):anchor_B;
-
- Vector2 gA = A->get_transform().get_origin();
- Vector2 gB = B?B->get_transform().get_origin():Vector2();
-
- Vector2 delta = gB - gA;
- delta = (delta+rB) -rA;
-
- real_t jdist = delta.length();
- correct=false;
- if (jdist==0)
- return false; // do not correct
-
- correct=true;
-
- n = delta / jdist;
-
- // calculate mass normal
- mass_normal = 1.0f/k_scalar(A, B, rA, rB, n);
-
- // calculate bias velocity
- //real_t maxBias = joint->constraint.maxBias;
- bias = -(get_bias()==0?space->get_constraint_bias():get_bias())*(1.0/p_step)*(jdist-dist);
- bias = CLAMP(bias, -get_max_bias(), +get_max_bias());
-
- // compute max impulse
- jn_max = get_max_force() * p_step;
-
- // apply accumulated impulse
- Vector2 j = n * jn_acc;
- A->apply_impulse(rA,-j);
- if (B)
- B->apply_impulse(rB,j);
-
- print_line("setup");
- return true;
-}
-
-
-
-void PinJoint2DSW::solve(real_t p_step){
-
- if (!correct)
- return;
-
- Vector2 ln = n;
-
- // compute relative velocity
- real_t vrn = normal_relative_velocity(A,B, rA, rB, ln);
-
- // compute normal impulse
- real_t jn = (bias - vrn)*mass_normal;
- real_t jnOld = jn_acc;
- jn_acc = CLAMP(jnOld + jn,-jn_max,jn_max); //cpfclamp(jnOld + jn, -joint->jnMax, joint->jnMax);
- jn = jn_acc - jnOld;
- print_line("jn_acc: "+rtos(jn_acc));
- Vector2 j = jn*ln;
-
- A->apply_impulse(rA,-j);
- if (B)
- B->apply_impulse(rB,j);
-
-}
-
-
-PinJoint2DSW::PinJoint2DSW(const Vector2& p_pos,Body2DSW* p_body_a,Body2DSW* p_body_b) : Joint2DSW(_arr,p_body_b?2:1) {
-
- A=p_body_a;
- B=p_body_b;
- anchor_A = p_body_a->get_inv_transform().xform(p_pos);
- anchor_B = p_body_b?p_body_b->get_inv_transform().xform(p_pos):p_pos;
-
- jn_acc=0;
- dist=0;
-
- p_body_a->add_constraint(this,0);
- if (p_body_b)
- p_body_b->add_constraint(this,1);
-
-}
-
-PinJoint2DSW::~PinJoint2DSW() {
-
- if (A)
- A->remove_constraint(this);
- if (B)
- B->remove_constraint(this);
-
-}
-
-#else
-
bool PinJoint2DSW::setup(real_t p_step) {
Space2DSW *space = A->get_space();
ERR_FAIL_COND_V(!space, false;)
rA = A->get_transform().basis_xform(anchor_A);
rB = B ? B->get_transform().basis_xform(anchor_B) : anchor_B;
-#if 0
- Vector2 gA = rA+A->get_transform().get_origin();
- Vector2 gB = B?rB+B->get_transform().get_origin():rB;
-
- VectorB delta = gB - gA;
-
- real_t jdist = delta.length();
- correct=false;
- if (jdist==0)
- return false; // do not correct
-#endif
-
- // deltaV = deltaV0 + K * impulse
- // invM = [(1/m1 + 1/m2) * eye(2) - skew(rA) * invI1 * skew(rA) - skew(rB) * invI2 * skew(rB)]
- // = [1/m1+1/m2 0 ] + invI1 * [rA.y*rA.y -rA.x*rA.y] + invI2 * [rA.y*rA.y -rA.x*rA.y]
- // [ 0 1/m1+1/m2] [-rA.x*rA.y rA.x*rA.x] [-rA.x*rA.y rA.x*rA.x]
real_t B_inv_mass = B ? B->get_inv_mass() : 0.0;
@@ -315,8 +201,6 @@ PinJoint2DSW::~PinJoint2DSW() {
B->remove_constraint(this);
}
-#endif
-
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
diff --git a/servers/physics_2d/joints_2d_sw.h b/servers/physics_2d/joints_2d_sw.h
index 9b8bb16327..11cb41d9d1 100644
--- a/servers/physics_2d/joints_2d_sw.h
+++ b/servers/physics_2d/joints_2d_sw.h
@@ -56,46 +56,6 @@ public:
max_force = max_bias = 3.40282e+38;
};
};
-#if 0
-
-class PinJoint2DSW : public Joint2DSW {
-
- union {
- struct {
- Body2DSW *A;
- Body2DSW *B;
- };
-
- Body2DSW *_arr[2];
- };
-
- Vector2 anchor_A;
- Vector2 anchor_B;
- real_t dist;
- real_t jn_acc;
- real_t jn_max;
- real_t max_distance;
- real_t mass_normal;
- real_t bias;
-
- Vector2 rA,rB;
- Vector2 n; //normal
- bool correct;
-
-
-public:
-
- virtual Physics2DServer::JointType get_type() const { return Physics2DServer::JOINT_PIN; }
-
- virtual bool setup(real_t p_step);
- virtual void solve(real_t p_step);
-
-
- PinJoint2DSW(const Vector2& p_pos,Body2DSW* p_body_a,Body2DSW* p_body_b=NULL);
- ~PinJoint2DSW();
-};
-
-#else
class PinJoint2DSW : public Joint2DSW {
@@ -129,7 +89,6 @@ public:
~PinJoint2DSW();
};
-#endif
class GrooveJoint2DSW : public Joint2DSW {
union {
diff --git a/servers/physics_2d/shape_2d_sw.cpp b/servers/physics_2d/shape_2d_sw.cpp
index 1fb817002a..20d0d38b17 100644
--- a/servers/physics_2d/shape_2d_sw.cpp
+++ b/servers/physics_2d/shape_2d_sw.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "shape_2d_sw.h"
+
#include "geometry.h"
#include "sort.h"
diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp
index 8a6d100671..9b2e586993 100644
--- a/servers/physics_2d/space_2d_sw.cpp
+++ b/servers/physics_2d/space_2d_sw.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "space_2d_sw.h"
+
#include "collision_solver_2d_sw.h"
#include "physics_2d_server_sw.h"
@@ -575,21 +576,6 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body, const Transform2D &p_from, co
Vector2 a = sr[i * 2 + 0];
Vector2 b = sr[i * 2 + 1];
-
-#if 0
- Vector2 rel = b-a;
- real_t d = rel.length();
- if (d==0)
- continue;
-
- Vector2 n = rel/d;
- real_t traveled = n.dot(recover_motion);
- a+=n*traveled;
-
- real_t d = a.distance_to(b);
- if (d<margin)
- continue;
-#endif
recover_motion += (b - a) * 0.4;
}