diff options
| author | Rémi Verschelde | 2016-07-18 16:37:50 +0200 |
|---|---|---|
| committer | GitHub | 2016-07-18 16:37:50 +0200 |
| commit | 3725114a1658337d6de21bb7a5b6fde5f8a74d1f (patch) | |
| tree | 1f8b1e38ecc1bab5782df21dba22087bcfc9cf1c | |
| parent | 254d79a560781e9f86debcc63ef6726cfd81ac80 (diff) | |
| parent | b09b449615956f795bee7a0d3a64bc1e65f2cab5 (diff) | |
| download | godot-3725114a1658337d6de21bb7a5b6fde5f8a74d1f.tar.gz godot-3725114a1658337d6de21bb7a5b6fde5f8a74d1f.tar.zst godot-3725114a1658337d6de21bb7a5b6fde5f8a74d1f.zip | |
Merge pull request #5383 from Ovnuniarchos/OptimizeOneWay
Optimized one-way collision loops.
| -rw-r--r-- | servers/physics_2d/body_pair_2d_sw.cpp | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/servers/physics_2d/body_pair_2d_sw.cpp b/servers/physics_2d/body_pair_2d_sw.cpp index 35f19605d..ba0358a1f 100644 --- a/servers/physics_2d/body_pair_2d_sw.cpp +++ b/servers/physics_2d/body_pair_2d_sw.cpp @@ -298,19 +298,17 @@ bool BodyPair2DSW::setup(float p_step) { if (A->is_using_one_way_collision()) { Vector2 direction = A->get_one_way_collision_direction(); bool valid=false; - for(int i=0;i<contact_count;i++) { - Contact& c = contacts[i]; + if (B->get_linear_velocity().dot(direction)>=0){ + for(int i=0;i<contact_count;i++) { + Contact& c = contacts[i]; + if (!c.reused) + continue; + if (c.normal.dot(direction)<0) + continue; - if (c.normal.dot(direction)<0) - continue; - if (B->get_linear_velocity().dot(direction)<0) - continue; - - if (!c.reused) { - continue; + valid=true; + break; } - - valid=true; } if (!valid) { @@ -323,20 +321,17 @@ bool BodyPair2DSW::setup(float p_step) { if (B->is_using_one_way_collision()) { Vector2 direction = B->get_one_way_collision_direction(); bool valid=false; - for(int i=0;i<contact_count;i++) { - - Contact& c = contacts[i]; + if (A->get_linear_velocity().dot(direction)>=0){ + for(int i=0;i<contact_count;i++) { + Contact& c = contacts[i]; + if (!c.reused) + continue; + if (c.normal.dot(direction)<0) + continue; - if (c.normal.dot(direction)<0) - continue; - if (A->get_linear_velocity().dot(direction)<0) - continue; - - if (!c.reused) { - continue; + valid=true; + break; } - - valid=true; } if (!valid) { collided=false; |
