void CollisionShape2DEditor::set_handle(int idx, Point2& p_point) {

	switch ( shape_type ) {
		case CAPSULE_SHAPE: {
			if (idx < 2) {
				Ref<CapsuleShape2D> capsule = node->get_shape();

				real_t parameter = Math::abs(p_point[idx]);

				if (idx==0) {
					capsule->set_radius(parameter);
				} else if (idx==1){
					capsule->set_height(parameter*2 - capsule->get_radius()*2);
				}

				canvas_item_editor->get_viewport_control()->update();
			}

		} break;

		case CIRCLE_SHAPE: {
			Ref<CircleShape2D> circle = node->get_shape();
			circle->set_radius(p_point.length());

			canvas_item_editor->get_viewport_control()->update();

		} break;

		case CONCAVE_POLYGON_SHAPE: {

		} break;

		case CONVEX_POLYGON_SHAPE: {

		} break;

		case LINE_SHAPE: {
			if (idx<2) {
				Ref<LineShape2D> line = node->get_shape();

				if (idx==0){
					line->set_d(p_point.length());
				}else{
					line->set_normal(p_point.normalized());
				}

				canvas_item_editor->get_viewport_control()->update();
			}


		} break;

		case RAY_SHAPE: {
			Ref<RayShape2D> ray = node->get_shape();

			ray->set_length(Math::abs(p_point.y));

			canvas_item_editor->get_viewport_control()->update();

		} break;

		case RECTANGLE_SHAPE: {
			if (idx<2) {
				Ref<RectangleShape2D> rect = node->get_shape();

				Vector2 extents = rect->get_extents();
				extents[idx] = p_point[idx];

				rect->set_extents(extents.abs());

				canvas_item_editor->get_viewport_control()->update();
			}

		} break;

		case SEGMENT_SHAPE: {
			if (edit_handle < 2) {
				Ref<SegmentShape2D> seg = node->get_shape();

				if (idx==0) {
					seg->set_a(p_point);
				} else if (idx==1) {
					seg->set_b(p_point);
				}

				canvas_item_editor->get_viewport_control()->update();
			}

		} break;
	}
}