diff options
Diffstat (limited to 'servers/physics_2d/body_2d_sw.cpp')
-rw-r--r-- | servers/physics_2d/body_2d_sw.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/servers/physics_2d/body_2d_sw.cpp b/servers/physics_2d/body_2d_sw.cpp index 6721e188d2..f1f94f3485 100644 --- a/servers/physics_2d/body_2d_sw.cpp +++ b/servers/physics_2d/body_2d_sw.cpp @@ -29,6 +29,7 @@ #include "body_2d_sw.h" #include "space_2d_sw.h" #include "area_2d_sw.h" +#include "physics_2d_server_sw.h" void Body2DSW::_update_inertia() { @@ -704,3 +705,24 @@ Physics2DDirectSpaceState* Physics2DDirectBodyStateSW::get_space_state() { return body->get_space()->get_direct_state(); } + + +Variant Physics2DDirectBodyStateSW::get_contact_collider_shape_metadata(int p_contact_idx) const { + + ERR_FAIL_INDEX_V(p_contact_idx,body->contact_count,Variant()); + + if (!Physics2DServerSW::singletonsw->body_owner.owns(body->contacts[p_contact_idx].collider)) { + + return Variant(); + } + Body2DSW *other = Physics2DServerSW::singletonsw->body_owner.get(body->contacts[p_contact_idx].collider); + + int sidx = body->contacts[p_contact_idx].collider_shape; + if (sidx<0 || sidx>=other->get_shape_count()) { + + return Variant(); + } + + + return other->get_shape_metadata(sidx); +} |