diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2017-08-27 22:46:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-27 22:46:40 +0200 |
commit | 9e0fbb49c12a4bb12c275194b0599fdfa0b1aabf (patch) | |
tree | 8804d0dd24cc126087462edfbbbf73ed61b56b0e /servers/physics_2d | |
parent | 37da8155a4500a9386027b4d791a86186bc7ab4a (diff) | |
parent | 7ad14e7a3e6f87ddc450f7e34621eb5200808451 (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.cpp | 185 | ||||
-rw-r--r-- | servers/physics_2d/joints_2d_sw.cpp | 118 | ||||
-rw-r--r-- | servers/physics_2d/joints_2d_sw.h | 41 | ||||
-rw-r--r-- | servers/physics_2d/shape_2d_sw.cpp | 1 | ||||
-rw-r--r-- | servers/physics_2d/space_2d_sw.cpp | 16 |
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; } |