Merge pull request #15606 from RandomShaper/fix-inherited-coll-shapes
Update collision shapes data on tree entered
This commit is contained in:
commit
bab9759645
8 changed files with 74 additions and 15 deletions
|
@ -115,6 +115,15 @@ Vector<Vector<Vector2> > CollisionPolygon2D::_decompose_in_convex() {
|
|||
return decomp;
|
||||
}
|
||||
|
||||
void CollisionPolygon2D::_update_in_shape_owner(bool p_xform_only) {
|
||||
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
if (p_xform_only)
|
||||
return;
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
parent->shape_owner_set_one_way_collision(owner_id, one_way_collision);
|
||||
}
|
||||
|
||||
void CollisionPolygon2D::_notification(int p_what) {
|
||||
|
||||
switch (p_what) {
|
||||
|
@ -124,9 +133,7 @@ void CollisionPolygon2D::_notification(int p_what) {
|
|||
if (parent) {
|
||||
owner_id = parent->create_shape_owner(this);
|
||||
_build_polygon();
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
parent->shape_owner_set_one_way_collision(owner_id, one_way_collision);
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
|
||||
/*if (Engine::get_singleton()->is_editor_hint()) {
|
||||
|
@ -135,11 +142,18 @@ void CollisionPolygon2D::_notification(int p_what) {
|
|||
set_z_index(VS::CANVAS_ITEM_Z_MAX - 1);
|
||||
}*/
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
|
||||
if (parent) {
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
|
||||
|
||||
if (parent) {
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
_update_in_shape_owner(true);
|
||||
}
|
||||
|
||||
} break;
|
||||
|
|
|
@ -59,6 +59,8 @@ protected:
|
|||
|
||||
void _build_polygon();
|
||||
|
||||
void _update_in_shape_owner(bool p_xform_only = false);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
|
|
|
@ -45,6 +45,15 @@ void CollisionShape2D::_shape_changed() {
|
|||
update();
|
||||
}
|
||||
|
||||
void CollisionShape2D::_update_in_shape_owner(bool p_xform_only) {
|
||||
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
if (p_xform_only)
|
||||
return;
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
parent->shape_owner_set_one_way_collision(owner_id, one_way_collision);
|
||||
}
|
||||
|
||||
void CollisionShape2D::_notification(int p_what) {
|
||||
|
||||
switch (p_what) {
|
||||
|
@ -57,9 +66,7 @@ void CollisionShape2D::_notification(int p_what) {
|
|||
if (shape.is_valid()) {
|
||||
parent->shape_owner_add_shape(owner_id, shape);
|
||||
}
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
parent->shape_owner_set_one_way_collision(owner_id, one_way_collision);
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
|
||||
/*if (Engine::get_singleton()->is_editor_hint()) {
|
||||
|
@ -68,11 +75,18 @@ void CollisionShape2D::_notification(int p_what) {
|
|||
set_z_index(VS::CANVAS_ITEM_Z_MAX - 1);
|
||||
}*/
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
|
||||
if (parent) {
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
|
||||
|
||||
if (parent) {
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
_update_in_shape_owner(true);
|
||||
}
|
||||
|
||||
} break;
|
||||
|
|
|
@ -47,6 +47,8 @@ class CollisionShape2D : public Node2D {
|
|||
bool disabled;
|
||||
bool one_way_collision;
|
||||
|
||||
void _update_in_shape_owner(bool p_xform_only = false);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
|
|
|
@ -73,6 +73,14 @@ void CollisionPolygon::_build_polygon() {
|
|||
}
|
||||
}
|
||||
|
||||
void CollisionPolygon::_update_in_shape_owner(bool p_xform_only) {
|
||||
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
if (p_xform_only)
|
||||
return;
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
}
|
||||
|
||||
void CollisionPolygon::_notification(int p_what) {
|
||||
|
||||
switch (p_what) {
|
||||
|
@ -82,14 +90,20 @@ void CollisionPolygon::_notification(int p_what) {
|
|||
if (parent) {
|
||||
owner_id = parent->create_shape_owner(this);
|
||||
_build_polygon();
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
} break;
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
|
||||
if (parent) {
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
|
||||
|
||||
if (parent) {
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
_update_in_shape_owner(true);
|
||||
}
|
||||
|
||||
} break;
|
||||
|
|
|
@ -51,6 +51,8 @@ protected:
|
|||
|
||||
void _build_polygon();
|
||||
|
||||
void _update_in_shape_owner(bool p_xform_only = false);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
|
|
|
@ -64,6 +64,14 @@ void CollisionShape::make_convex_from_brothers() {
|
|||
}
|
||||
}
|
||||
|
||||
void CollisionShape::_update_in_shape_owner(bool p_xform_only) {
|
||||
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
if (p_xform_only)
|
||||
return;
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
}
|
||||
|
||||
void CollisionShape::_notification(int p_what) {
|
||||
|
||||
switch (p_what) {
|
||||
|
@ -75,19 +83,20 @@ void CollisionShape::_notification(int p_what) {
|
|||
if (shape.is_valid()) {
|
||||
parent->shape_owner_add_shape(owner_id, shape);
|
||||
}
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
parent->shape_owner_set_disabled(owner_id, disabled);
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
} break;
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
if (parent) {
|
||||
_update_in_shape_owner();
|
||||
}
|
||||
if (get_tree()->is_debugging_collisions_hint()) {
|
||||
_create_debug_shape();
|
||||
}
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
|
||||
if (parent) {
|
||||
parent->shape_owner_set_transform(owner_id, get_transform());
|
||||
_update_in_shape_owner(true);
|
||||
}
|
||||
} break;
|
||||
case NOTIFICATION_UNPARENTED: {
|
||||
|
|
|
@ -51,6 +51,8 @@ class CollisionShape : public Spatial {
|
|||
|
||||
void _create_debug_shape();
|
||||
|
||||
void _update_in_shape_owner(bool p_xform_only = false);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
|
|
Loading…
Reference in a new issue