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(); } };
void Physics2DServerSW::area_set_transform(RID p_area, const Transform2D &p_transform) { Area2DSW *area = area_owner.get(p_area); ERR_FAIL_COND(!area); area->set_transform(p_transform); };
void Physics2DServerSW::area_set_pickable(RID p_area, bool p_pickable) { Area2DSW *area = area_owner.get(p_area); ERR_FAIL_COND(!area); area->set_pickable(p_pickable); }