void Physics2DServerSW::free(RID p_rid) { if (shape_owner.owns(p_rid)) { Shape2DSW *shape = shape_owner.get(p_rid); while (shape->get_owners().size()) { ShapeOwner2DSW *so = shape->get_owners().front()->key(); so->remove_shape(shape); } shape_owner.free(p_rid); memdelete(shape); } else if (body_owner.owns(p_rid)) { Body2DSW *body = body_owner.get(p_rid); /* if (body->get_state_query()) _clear_query(body->get_state_query()); if (body->get_direct_state_query()) _clear_query(body->get_direct_state_query()); */ body_set_space(p_rid, RID()); while (body->get_shape_count()) { body->remove_shape(0); } body_owner.free(p_rid); memdelete(body); } else if (area_owner.owns(p_rid)) { Area2DSW *area = area_owner.get(p_rid); /* if (area->get_monitor_query()) _clear_query(area->get_monitor_query()); */ area->set_space(NULL); while (area->get_shape_count()) { area->remove_shape(0); } area_owner.free(p_rid); memdelete(area); } else if (space_owner.owns(p_rid)) { Space2DSW *space = space_owner.get(p_rid); while (space->get_objects().size()) { CollisionObject2DSW *co = (CollisionObject2DSW *)space->get_objects().front()->get(); co->set_space(NULL); } active_spaces.erase(space); free(space->get_default_area()->get_self()); space_owner.free(p_rid); memdelete(space); } else if (joint_owner.owns(p_rid)) { Joint2DSW *joint = joint_owner.get(p_rid); joint_owner.free(p_rid); memdelete(joint); } else { ERR_EXPLAIN("Invalid ID"); ERR_FAIL(); } };
int Physics2DServerSW::body_get_max_contacts_reported(RID p_body) const { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND_V(!body,-1); return body->get_max_contacts_reported(); }
void Physics2DServerSW::body_set_one_way_collision_direction(RID p_body,const Vector2& p_direction) { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND(!body); body->set_one_way_collision_direction(p_direction); }
void Physics2DServerSW::body_set_max_contacts_reported(RID p_body, int p_contacts) { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND(!body); body->set_max_contacts_reported(p_contacts); }
bool Physics2DServerSW::body_is_omitting_force_integration(RID p_body) const { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND_V(!body,false); return body->get_omit_force_integration(); };
Vector2 Physics2DServerSW::body_get_applied_force(RID p_body) const { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND_V(!body,Vector2()); return body->get_applied_force(); };
Variant Physics2DServerSW::body_get_shape_metadata(RID p_body, int p_shape_idx) const { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND_V(!body,Variant()); return body->get_shape_metadata(p_shape_idx); }
void Physics2DServerSW::body_set_shape_metadata(RID p_body, int p_shape_idx, const Variant& p_metadata) { Body2DSW *body = body_owner.get(p_body); ERR_FAIL_COND(!body); body->set_shape_metadata(p_shape_idx,p_metadata); }