diff options
author | Hein-Pieter van Braam <hp@tmm.cx> | 2017-08-24 22:58:51 +0200 |
---|---|---|
committer | Hein-Pieter van Braam <hp@tmm.cx> | 2017-08-24 23:08:24 +0200 |
commit | cacced7e507f7603bacc03ae2616e58f0ede122a (patch) | |
tree | 7af89373e86cd1a7af6ea04e10280084cabb7144 /scene | |
parent | 4aa2c18cb428ffde05c67987926736a9ca62703b (diff) |
Convert Object::cast_to() to the static version
Currently we rely on some undefined behavior when Object->cast_to() gets
called with a Null pointer. This used to work fine with GCC < 6 but
newer versions of GCC remove all codepaths in which the this pointer is
Null. However, the non-static cast_to() was supposed to be null safe.
This patch makes cast_to() Null safe and removes the now redundant Null
checks where they existed.
It is explained in this article: https://www.viva64.com/en/b/0226/
Diffstat (limited to 'scene')
76 files changed, 394 insertions, 444 deletions
diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp index 02a0509449..8f405dd314 100644 --- a/scene/2d/area_2d.cpp +++ b/scene/2d/area_2d.cpp @@ -116,7 +116,7 @@ real_t Area2D::get_priority() const { void Area2D::_body_enter_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = body_map.find(p_id); @@ -134,7 +134,7 @@ void Area2D::_body_enter_tree(ObjectID p_id) { void Area2D::_body_exit_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = body_map.find(p_id); ERR_FAIL_COND(!E); @@ -153,7 +153,7 @@ void Area2D::_body_inout(int p_status, const RID &p_body, int p_instance, int p_ ObjectID objid = p_instance; Object *obj = ObjectDB::get_instance(objid); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); Map<ObjectID, BodyState>::Element *E = body_map.find(objid); @@ -217,7 +217,7 @@ void Area2D::_body_inout(int p_status, const RID &p_body, int p_instance, int p_ void Area2D::_area_enter_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, AreaState>::Element *E = area_map.find(p_id); @@ -235,7 +235,7 @@ void Area2D::_area_enter_tree(ObjectID p_id) { void Area2D::_area_exit_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, AreaState>::Element *E = area_map.find(p_id); ERR_FAIL_COND(!E); @@ -254,7 +254,7 @@ void Area2D::_area_inout(int p_status, const RID &p_area, int p_instance, int p_ ObjectID objid = p_instance; Object *obj = ObjectDB::get_instance(objid); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); Map<ObjectID, AreaState>::Element *E = area_map.find(objid); @@ -330,7 +330,7 @@ void Area2D::_clear_monitoring() { for (Map<ObjectID, BodyState>::Element *E = bmcopy.front(); E; E = E->next()) { Object *obj = ObjectDB::get_instance(E->key()); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); if (!node) //node may have been deleted in previous frame or at other legiminate point continue; @@ -360,7 +360,7 @@ void Area2D::_clear_monitoring() { for (Map<ObjectID, AreaState>::Element *E = bmcopy.front(); E; E = E->next()) { Object *obj = ObjectDB::get_instance(E->key()); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); if (!node) //node may have been deleted in previous frame or at other legiminate point continue; diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index 73782e1515..b2848238f4 100644 --- a/scene/2d/audio_stream_player_2d.cpp +++ b/scene/2d/audio_stream_player_2d.cpp @@ -157,10 +157,8 @@ void AudioStreamPlayer2D::_notification(int p_what) { int areas = space_state->intersect_point(global_pos, sr, MAX_INTERSECT_AREAS, Set<RID>(), area_mask, Physics2DDirectSpaceState::TYPE_MASK_AREA); for (int i = 0; i < areas; i++) { - if (!sr[i].collider) - continue; - Area2D *area2d = sr[i].collider->cast_to<Area2D>(); + Area2D *area2d = Object::cast_to<Area2D>(sr[i].collider); if (!area2d) continue; diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index f309631715..6cbac4ed3b 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -577,7 +577,7 @@ void Camera2D::set_custom_viewport(Node *p_viewport) { remove_from_group(canvas_group_name); } - custom_viewport = p_viewport->cast_to<Viewport>(); + custom_viewport = Object::cast_to<Viewport>(p_viewport); if (custom_viewport) { custom_viewport_id = custom_viewport->get_instance_id(); diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 5a519dee69..ea32953d68 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -260,7 +260,7 @@ void CanvasItem::_propagate_visibility_changed(bool p_visible) { for (int i = 0; i < get_child_count(); i++) { - CanvasItem *c = get_child(i)->cast_to<CanvasItem>(); + CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i)); if (c && c->visible) //should the toplevels stop propagation? i think so but.. c->_propagate_visibility_changed(p_visible); @@ -398,7 +398,7 @@ void CanvasItem::_toplevel_raise_self() { void CanvasItem::_enter_canvas() { - if ((!get_parent() || !get_parent()->cast_to<CanvasItem>()) || toplevel) { + if ((!Object::cast_to<CanvasItem>(get_parent())) || toplevel) { Node *n = this; @@ -406,7 +406,7 @@ void CanvasItem::_enter_canvas() { while (n) { - canvas_layer = n->cast_to<CanvasLayer>(); + canvas_layer = Object::cast_to<CanvasLayer>(n); if (canvas_layer) { break; } @@ -460,7 +460,7 @@ void CanvasItem::_notification(int p_what) { first_draw = true; if (get_parent()) { - CanvasItem *ci = get_parent()->cast_to<CanvasItem>(); + CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent()); if (ci) C = ci->children_items.push_back(this); } @@ -488,7 +488,7 @@ void CanvasItem::_notification(int p_what) { get_tree()->xform_change_list.remove(&xform_change); _exit_canvas(); if (C) { - get_parent()->cast_to<CanvasItem>()->children_items.erase(C); + Object::cast_to<CanvasItem>(get_parent())->children_items.erase(C); C = NULL; } global_invalid = true; @@ -565,11 +565,7 @@ CanvasItem *CanvasItem::get_parent_item() const { if (toplevel) return NULL; - Node *parent = get_parent(); - if (!parent) - return NULL; - - return parent->cast_to<CanvasItem>(); + return Object::cast_to<CanvasItem>(get_parent()); } void CanvasItem::set_self_modulate(const Color &p_self_modulate) { @@ -830,8 +826,8 @@ RID CanvasItem::get_canvas() const { CanvasItem *CanvasItem::get_toplevel() const { CanvasItem *ci = const_cast<CanvasItem *>(this); - while (!ci->toplevel && ci->get_parent() && ci->get_parent()->cast_to<CanvasItem>()) { - ci = ci->get_parent()->cast_to<CanvasItem>(); + while (!ci->toplevel && Object::cast_to<CanvasItem>(ci->get_parent())) { + ci = Object::cast_to<CanvasItem>(ci->get_parent()); } return ci; @@ -1062,8 +1058,8 @@ Transform2D CanvasItem::get_canvas_transform() const { if (canvas_layer) return canvas_layer->get_transform(); - else if (get_parent()->cast_to<CanvasItem>()) - return get_parent()->cast_to<CanvasItem>()->get_canvas_transform(); + else if (Object::cast_to<CanvasItem>(get_parent())) + return Object::cast_to<CanvasItem>(get_parent())->get_canvas_transform(); else return get_viewport()->get_canvas_transform(); } @@ -1122,7 +1118,7 @@ Rect2 CanvasItem::get_item_and_children_rect() const { Rect2 rect = get_item_rect(); for (int i = 0; i < get_child_count(); i++) { - CanvasItem *c = get_child(i)->cast_to<CanvasItem>(); + CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i)); if (c) { Rect2 sir = c->get_transform().xform(c->get_item_and_children_rect()); rect = rect.merge(sir); diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index 433661e393..f136de5166 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -126,7 +126,7 @@ void CollisionPolygon2D::_notification(int p_what) { switch (p_what) { case NOTIFICATION_PARENTED: { - parent = get_parent()->cast_to<CollisionObject2D>(); + parent = Object::cast_to<CollisionObject2D>(get_parent()); if (parent) { owner_id = parent->create_shape_owner(this); _build_polygon(); @@ -257,7 +257,7 @@ Rect2 CollisionPolygon2D::get_item_rect() const { String CollisionPolygon2D::get_configuration_warning() const { - if (!get_parent()->cast_to<CollisionObject2D>()) { + if (!Object::cast_to<CollisionObject2D>(get_parent())) { return TTR("CollisionPolygon2D only serves to provide a collision shape to a CollisionObject2D derived node. Please only use it as a child of Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."); } diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp index 3fda4ab464..3bb53a5e11 100644 --- a/scene/2d/collision_shape_2d.cpp +++ b/scene/2d/collision_shape_2d.cpp @@ -50,7 +50,7 @@ void CollisionShape2D::_notification(int p_what) { case NOTIFICATION_PARENTED: { - parent = get_parent()->cast_to<CollisionObject2D>(); + parent = Object::cast_to<CollisionObject2D>(get_parent()); if (parent) { owner_id = parent->create_shape_owner(this); if (shape.is_valid()) { @@ -165,7 +165,7 @@ Rect2 CollisionShape2D::get_item_rect() const { String CollisionShape2D::get_configuration_warning() const { - if (!get_parent()->cast_to<CollisionObject2D>()) { + if (!Object::cast_to<CollisionObject2D>(get_parent())) { return TTR("CollisionShape2D only serves to provide a collision shape to a CollisionObject2D derived node. Please only use it as a child of Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."); } diff --git a/scene/2d/joints_2d.cpp b/scene/2d/joints_2d.cpp index ee41dca3a6..726f57d42e 100644 --- a/scene/2d/joints_2d.cpp +++ b/scene/2d/joints_2d.cpp @@ -172,8 +172,8 @@ RID PinJoint2D::_configure_joint() { if (!node_a && !node_b) return RID(); - PhysicsBody2D *body_a = node_a ? node_a->cast_to<PhysicsBody2D>() : (PhysicsBody2D *)NULL; - PhysicsBody2D *body_b = node_b ? node_b->cast_to<PhysicsBody2D>() : (PhysicsBody2D *)NULL; + PhysicsBody2D *body_a = Object::cast_to<PhysicsBody2D>(node_a); + PhysicsBody2D *body_b = Object::cast_to<PhysicsBody2D>(node_b); if (!body_a && !body_b) return RID(); @@ -249,8 +249,8 @@ RID GrooveJoint2D::_configure_joint() { if (!node_a || !node_b) return RID(); - PhysicsBody2D *body_a = node_a->cast_to<PhysicsBody2D>(); - PhysicsBody2D *body_b = node_b->cast_to<PhysicsBody2D>(); + PhysicsBody2D *body_a = Object::cast_to<PhysicsBody2D>(node_a); + PhysicsBody2D *body_b = Object::cast_to<PhysicsBody2D>(node_b); if (!body_a || !body_b) return RID(); @@ -338,8 +338,8 @@ RID DampedSpringJoint2D::_configure_joint() { if (!node_a || !node_b) return RID(); - PhysicsBody2D *body_a = node_a->cast_to<PhysicsBody2D>(); - PhysicsBody2D *body_b = node_b->cast_to<PhysicsBody2D>(); + PhysicsBody2D *body_a = Object::cast_to<PhysicsBody2D>(node_a); + PhysicsBody2D *body_b = Object::cast_to<PhysicsBody2D>(node_b); if (!body_a || !body_b) return RID(); diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp index 7515d486c2..0d5d06bef7 100644 --- a/scene/2d/navigation_polygon.cpp +++ b/scene/2d/navigation_polygon.cpp @@ -319,7 +319,7 @@ void NavigationPolygonInstance::_notification(int p_what) { Node2D *c = this; while (c) { - navigation = c->cast_to<Navigation2D>(); + navigation = Object::cast_to<Navigation2D>(c); if (navigation) { if (enabled && navpoly.is_valid()) { @@ -329,7 +329,7 @@ void NavigationPolygonInstance::_notification(int p_what) { break; } - c = c->get_parent()->cast_to<Node2D>(); + c = Object::cast_to<Node2D>(get_parent()); } } break; @@ -448,11 +448,11 @@ String NavigationPolygonInstance::get_configuration_warning() const { const Node2D *c = this; while (c) { - if (c->cast_to<Navigation2D>()) { + if (Object::cast_to<Navigation2D>(c)) { return String(); } - c = c->get_parent()->cast_to<Node2D>(); + c = Object::cast_to<Node2D>(get_parent()); } return TTR("NavigationPolygonInstance must be a child or grandchild to a Navigation2D node. It only provides navigation data."); diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 98d6a467b1..af5834c5b6 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -379,7 +379,7 @@ Transform2D Node2D::get_relative_transform_to_parent(const Node *p_parent) const if (p_parent == this) return Transform2D(); - Node2D *parent_2d = get_parent()->cast_to<Node2D>(); + Node2D *parent_2d = Object::cast_to<Node2D>(get_parent()); ERR_FAIL_COND_V(!parent_2d, Transform2D()); if (p_parent == parent_2d) diff --git a/scene/2d/parallax_background.cpp b/scene/2d/parallax_background.cpp index 433ab5ff8d..bdb4bd2b16 100644 --- a/scene/2d/parallax_background.cpp +++ b/scene/2d/parallax_background.cpp @@ -101,7 +101,7 @@ void ParallaxBackground::_update_scroll() { for (int i = 0; i < get_child_count(); i++) { - ParallaxLayer *l = get_child(i)->cast_to<ParallaxLayer>(); + ParallaxLayer *l = Object::cast_to<ParallaxLayer>(get_child(i)); if (!l) continue; diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp index debdc22b65..40d688b708 100644 --- a/scene/2d/parallax_layer.cpp +++ b/scene/2d/parallax_layer.cpp @@ -36,11 +36,8 @@ void ParallaxLayer::set_motion_scale(const Size2 &p_scale) { motion_scale = p_scale; - if (!get_parent()) - return; - - ParallaxBackground *pb = get_parent()->cast_to<ParallaxBackground>(); - if (is_inside_tree() && pb) { + ParallaxBackground *pb = Object::cast_to<ParallaxBackground>(get_parent()); + if (pb && is_inside_tree()) { Vector2 ofs = pb->get_final_offset(); float scale = pb->get_scroll_scale(); set_base_offset_and_scale(ofs, scale); @@ -56,11 +53,8 @@ void ParallaxLayer::set_motion_offset(const Size2 &p_offset) { motion_offset = p_offset; - if (!get_parent()) - return; - - ParallaxBackground *pb = get_parent()->cast_to<ParallaxBackground>(); - if (is_inside_tree() && pb) { + ParallaxBackground *pb = Object::cast_to<ParallaxBackground>(get_parent()); + if (pb && is_inside_tree()) { Vector2 ofs = pb->get_final_offset(); float scale = pb->get_scroll_scale(); set_base_offset_and_scale(ofs, scale); @@ -74,10 +68,7 @@ Size2 ParallaxLayer::get_motion_offset() const { void ParallaxLayer::_update_mirroring() { - if (!get_parent()) - return; - - ParallaxBackground *pb = get_parent()->cast_to<ParallaxBackground>(); + ParallaxBackground *pb = Object::cast_to<ParallaxBackground>(get_parent()); if (pb) { RID c = pb->get_world_2d()->get_canvas(); @@ -139,7 +130,7 @@ void ParallaxLayer::set_base_offset_and_scale(const Point2 &p_offset, float p_sc String ParallaxLayer::get_configuration_warning() const { - if (!get_parent() || !get_parent()->cast_to<ParallaxBackground>()) { + if (!Object::cast_to<ParallaxBackground>(get_parent())) { return TTR("ParallaxLayer node only works when set as child of a ParallaxBackground node."); } diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp index a79f60c96f..d2474d9557 100644 --- a/scene/2d/path_2d.cpp +++ b/scene/2d/path_2d.cpp @@ -137,13 +137,8 @@ void PathFollow2D::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { - Node *parent = get_parent(); - if (parent) { - - path = parent->cast_to<Path2D>(); - if (path) { - _update_transform(); - } + if ((path = Object::cast_to<Path2D>(get_parent()))) { + _update_transform(); } } break; @@ -231,7 +226,7 @@ String PathFollow2D::get_configuration_warning() const { if (!is_visible_in_tree() || !is_inside_tree()) return String(); - if (!get_parent() || !get_parent()->cast_to<Path2D>()) { + if (!Object::cast_to<Path2D>(get_parent())) { return TTR("PathFollow2D only works when set as a child of a Path2D node."); } diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index aaba9da299..30ede699fa 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -143,7 +143,7 @@ PhysicsBody2D::PhysicsBody2D(Physics2DServer::BodyMode p_mode) void PhysicsBody2D::add_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); - PhysicsBody2D *physics_body = p_node->cast_to<PhysicsBody2D>(); + PhysicsBody2D *physics_body = Object::cast_to<PhysicsBody2D>(p_node); if (!physics_body) { ERR_EXPLAIN("Collision exception only works between two objects of PhysicsBody type"); } @@ -154,7 +154,7 @@ void PhysicsBody2D::add_collision_exception_with(Node *p_node) { void PhysicsBody2D::remove_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); - PhysicsBody2D *physics_body = p_node->cast_to<PhysicsBody2D>(); + PhysicsBody2D *physics_body = Object::cast_to<PhysicsBody2D>(p_node); if (!physics_body) { ERR_EXPLAIN("Collision exception only works between two objects of PhysicsBody type"); } @@ -262,7 +262,7 @@ StaticBody2D::~StaticBody2D() { void RigidBody2D::_body_enter_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = contact_monitor->body_map.find(p_id); @@ -285,7 +285,7 @@ void RigidBody2D::_body_enter_tree(ObjectID p_id) { void RigidBody2D::_body_exit_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = contact_monitor->body_map.find(p_id); ERR_FAIL_COND(!E); @@ -310,7 +310,7 @@ void RigidBody2D::_body_inout(int p_status, ObjectID p_instance, int p_body_shap ObjectID objid = p_instance; Object *obj = ObjectDB::get_instance(objid); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); Map<ObjectID, BodyState>::Element *E = contact_monitor->body_map.find(objid); @@ -393,7 +393,7 @@ void RigidBody2D::_direct_state_changed(Object *p_state) { //eh.. fuck #ifdef DEBUG_ENABLED - state = p_state->cast_to<Physics2DDirectBodyState>(); + state = Object::cast_to<Physics2DDirectBodyState>(p_state); #else state = (Physics2DDirectBodyState *)p_state; //trust it #endif @@ -1171,12 +1171,10 @@ ObjectID KinematicBody2D::get_collision_collider_id(int p_collision) const { Object *KinematicBody2D::get_collision_collider_shape(int p_collision) const { ERR_FAIL_INDEX_V(p_collision, colliders.size(), NULL); Object *collider = get_collision_collider(p_collision); - if (collider) { - CollisionObject2D *obj2d = collider->cast_to<CollisionObject2D>(); - if (obj2d) { - uint32_t owner = shape_find_owner(colliders[p_collision].collider_shape); - return obj2d->shape_owner_get_owner(owner); - } + CollisionObject2D *obj2d = Object::cast_to<CollisionObject2D>(collider); + if (obj2d) { + uint32_t owner = shape_find_owner(colliders[p_collision].collider_shape); + return obj2d->shape_owner_get_owner(owner); } return NULL; diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp index fbec922a2d..2d2a00847d 100644 --- a/scene/2d/ray_cast_2d.cpp +++ b/scene/2d/ray_cast_2d.cpp @@ -115,11 +115,11 @@ void RayCast2D::set_exclude_parent_body(bool p_exclude_parent_body) { if (!is_inside_tree()) return; - if (get_parent()->cast_to<PhysicsBody2D>()) { + if (Object::cast_to<PhysicsBody2D>(get_parent())) { if (exclude_parent_body) - exclude.insert(get_parent()->cast_to<PhysicsBody2D>()->get_rid()); + exclude.insert(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid()); else - exclude.erase(get_parent()->cast_to<PhysicsBody2D>()->get_rid()); + exclude.erase(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid()); } } @@ -139,11 +139,11 @@ void RayCast2D::_notification(int p_what) { else set_fixed_process(false); - if (get_parent()->cast_to<PhysicsBody2D>()) { + if (Object::cast_to<PhysicsBody2D>(get_parent())) { if (exclude_parent_body) - exclude.insert(get_parent()->cast_to<PhysicsBody2D>()->get_rid()); + exclude.insert(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid()); else - exclude.erase(get_parent()->cast_to<PhysicsBody2D>()->get_rid()); + exclude.erase(Object::cast_to<PhysicsBody2D>(get_parent())->get_rid()); } } break; case NOTIFICATION_EXIT_TREE: { @@ -227,7 +227,7 @@ void RayCast2D::add_exception_rid(const RID &p_rid) { void RayCast2D::add_exception(const Object *p_object) { ERR_FAIL_NULL(p_object); - CollisionObject2D *co = ((Object *)p_object)->cast_to<CollisionObject2D>(); + const CollisionObject2D *co = Object::cast_to<CollisionObject2D>(p_object); if (!co) return; add_exception_rid(co->get_rid()); @@ -241,7 +241,7 @@ void RayCast2D::remove_exception_rid(const RID &p_rid) { void RayCast2D::remove_exception(const Object *p_object) { ERR_FAIL_NULL(p_object); - CollisionObject2D *co = ((Object *)p_object)->cast_to<CollisionObject2D>(); + const CollisionObject2D *co = Object::cast_to<CollisionObject2D>(p_object); if (!co) return; remove_exception_rid(co->get_rid()); diff --git a/scene/2d/remote_transform_2d.cpp b/scene/2d/remote_transform_2d.cpp index cbd7ac06f5..a2d53f0c7b 100644 --- a/scene/2d/remote_transform_2d.cpp +++ b/scene/2d/remote_transform_2d.cpp @@ -51,11 +51,7 @@ void RemoteTransform2D::_update_remote() { if (!cache) return; - Object *obj = ObjectDB::get_instance(cache); - if (!obj) - return; - - Node2D *n = obj->cast_to<Node2D>(); + Node2D *n = Object::cast_to<Node2D>(ObjectDB::get_instance(cache)); if (!n) return; @@ -182,7 +178,7 @@ bool RemoteTransform2D::get_update_scale() const { String RemoteTransform2D::get_configuration_warning() const { - if (!has_node(remote_node) || !get_node(remote_node) || !get_node(remote_node)->cast_to<Node2D>()) { + if (!has_node(remote_node) || !Object::cast_to<Node2D>(get_node(remote_node))) { return TTR("Path property must point to a valid Node2D node to work."); } diff --git a/scene/2d/screen_button.cpp b/scene/2d/screen_button.cpp index e8e5e9411f..c39b12fc9a 100644 --- a/scene/2d/screen_button.cpp +++ b/scene/2d/screen_button.cpp @@ -196,11 +196,11 @@ void TouchScreenButton::_input(const Ref<InputEvent> &p_event) { ERR_FAIL_COND(!is_visible_in_tree()); - const InputEventScreenTouch *st = p_event->cast_to<InputEventScreenTouch>(); + const InputEventScreenTouch *st = Object::cast_to<InputEventScreenTouch>(*p_event); if (passby_press) { - const InputEventScreenDrag *sd = p_event->cast_to<InputEventScreenDrag>(); + const InputEventScreenDrag *sd = Object::cast_to<InputEventScreenDrag>(*p_event); if (st && !st->is_pressed() && finger_pressed == st->get_index()) { diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index 2ec529a166..b7b68d8060 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -399,7 +399,7 @@ void ViewportSprite::_notification(int p_what) { Node *n = get_node(viewport_path); ERR_FAIL_COND(!n); - Viewport *vp=n->cast_to<Viewport>(); + Viewport *vp=Object::cast_to<Viewport>(n); ERR_FAIL_COND(!vp); Ref<RenderTargetTexture> rtt = vp->get_render_target_texture(); @@ -467,7 +467,7 @@ void ViewportSprite::set_viewport_path(const NodePath& p_viewport) { Node *n = get_node(viewport_path); ERR_FAIL_COND(!n); - Viewport *vp=n->cast_to<Viewport>(); + Viewport *vp=Object::cast_to<Viewport>(n); ERR_FAIL_COND(!vp); Ref<RenderTargetTexture> rtt = vp->get_render_target_texture(); @@ -544,13 +544,13 @@ Rect2 ViewportSprite::get_item_rect() const { String ViewportSprite::get_configuration_warning() const { - if (!has_node(viewport_path) || !get_node(viewport_path) || !get_node(viewport_path)->cast_to<Viewport>()) { + if (!has_node(viewport_path) || !Object::cast_to<Viewport>(get_node(viewport_path))) { return TTR("Path property must point to a valid Viewport node to work. Such Viewport must be set to 'render target' mode."); } else { Node *n = get_node(viewport_path); if (n) { - Viewport *vp = n->cast_to<Viewport>(); + Viewport *vp = Object::cast_to<Viewport>(n); if (!vp->is_set_as_render_target()) { return TTR("The Viewport set in the path property must be set as 'render target' in order for this sprite to work."); diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 5d246e331f..a4a7d5eae8 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -50,12 +50,12 @@ void TileMap::_notification(int p_what) { Node2D *c = this; while (c) { - navigation = c->cast_to<Navigation2D>(); + navigation = Object::cast_to<Navigation2D>(c); if (navigation) { break; } - c = c->get_parent()->cast_to<Node2D>(); + c = Object::cast_to<Node2D>(c->get_parent()); } pending_update = true; diff --git a/scene/2d/visibility_notifier_2d.cpp b/scene/2d/visibility_notifier_2d.cpp index 2f2ad08f01..a641828df8 100644 --- a/scene/2d/visibility_notifier_2d.cpp +++ b/scene/2d/visibility_notifier_2d.cpp @@ -184,7 +184,7 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) { if (enabler[ENABLER_FREEZE_BODIES]) { - RigidBody2D *rb2d = p_node->cast_to<RigidBody2D>(); + RigidBody2D *rb2d = Object::cast_to<RigidBody2D>(p_node); if (rb2d && ((rb2d->get_mode() == RigidBody2D::MODE_CHARACTER || (rb2d->get_mode() == RigidBody2D::MODE_RIGID && !rb2d->is_able_to_sleep())))) { add = true; @@ -194,7 +194,7 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) { if (enabler[ENABLER_PAUSE_ANIMATIONS]) { - AnimationPlayer *ap = p_node->cast_to<AnimationPlayer>(); + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node); if (ap) { add = true; } @@ -202,7 +202,7 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) { if (enabler[ENABLER_PAUSE_ANIMATED_SPRITES]) { - AnimatedSprite *as = p_node->cast_to<AnimatedSprite>(); + AnimatedSprite *as = Object::cast_to<AnimatedSprite>(p_node); if (as) { add = true; } @@ -210,7 +210,7 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) { if (enabler[ENABLER_PAUSE_PARTICLES]) { - Particles2D *ps = p_node->cast_to<Particles2D>(); + Particles2D *ps = Object::cast_to<Particles2D>(p_node); if (ps) { add = true; } @@ -273,7 +273,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) { ERR_FAIL_COND(!nodes.has(p_node)); { - RigidBody2D *rb = p_node->cast_to<RigidBody2D>(); + RigidBody2D *rb = Object::cast_to<RigidBody2D>(p_node); if (rb) { rb->set_sleeping(!p_enabled); @@ -281,7 +281,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) { } { - AnimationPlayer *ap = p_node->cast_to<AnimationPlayer>(); + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node); if (ap) { @@ -289,7 +289,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) { } } { - AnimatedSprite *as = p_node->cast_to<AnimatedSprite>(); + AnimatedSprite *as = Object::cast_to<AnimatedSprite>(p_node); if (as) { @@ -301,7 +301,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) { } { - Particles2D *ps = p_node->cast_to<Particles2D>(); + Particles2D *ps = Object::cast_to<Particles2D>(p_node); if (ps) { diff --git a/scene/3d/area.cpp b/scene/3d/area.cpp index c64b807e43..c19b361cdd 100644 --- a/scene/3d/area.cpp +++ b/scene/3d/area.cpp @@ -115,7 +115,7 @@ real_t Area::get_priority() const { void Area::_body_enter_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = body_map.find(p_id); @@ -133,7 +133,7 @@ void Area::_body_enter_tree(ObjectID p_id) { void Area::_body_exit_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = body_map.find(p_id); ERR_FAIL_COND(!E); @@ -152,7 +152,7 @@ void Area::_body_inout(int p_status, const RID &p_body, int p_instance, int p_bo ObjectID objid = p_instance; Object *obj = ObjectDB::get_instance(objid); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); Map<ObjectID, BodyState>::Element *E = body_map.find(objid); @@ -228,7 +228,7 @@ void Area::_clear_monitoring() { for (Map<ObjectID, BodyState>::Element *E = bmcopy.front(); E; E = E->next()) { Object *obj = ObjectDB::get_instance(E->key()); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); if (!node) //node may have been deleted in previous frame or at other legiminate point continue; @@ -258,7 +258,7 @@ void Area::_clear_monitoring() { for (Map<ObjectID, AreaState>::Element *E = bmcopy.front(); E; E = E->next()) { Object *obj = ObjectDB::get_instance(E->key()); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); if (!node) //node may have been deleted in previous frame or at other legiminate point continue; @@ -312,7 +312,7 @@ void Area::set_monitoring(bool p_enable) { void Area::_area_enter_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, AreaState>::Element *E = area_map.find(p_id); @@ -330,7 +330,7 @@ void Area::_area_enter_tree(ObjectID p_id) { void Area::_area_exit_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, AreaState>::Element *E = area_map.find(p_id); ERR_FAIL_COND(!E); @@ -349,7 +349,7 @@ void Area::_area_inout(int p_status, const RID &p_area, int p_instance, int p_ar ObjectID objid = p_instance; Object *obj = ObjectDB::get_instance(objid); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); Map<ObjectID, AreaState>::Element *E = area_map.find(objid); diff --git a/scene/3d/arvr_nodes.cpp b/scene/3d/arvr_nodes.cpp index 3c99f7fb3a..8a02c54907 100644 --- a/scene/3d/arvr_nodes.cpp +++ b/scene/3d/arvr_nodes.cpp @@ -40,14 +40,14 @@ void ARVRCamera::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { // need to find our ARVROrigin parent and let it know we're it's camera! - ARVROrigin *origin = get_parent()->cast_to<ARVROrigin>(); + ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin != NULL) { origin->set_tracked_camera(this); } }; break; case NOTIFICATION_EXIT_TREE: { // need to find our ARVROrigin parent and let it know we're no longer it's camera! - ARVROrigin *origin = get_parent()->cast_to<ARVROrigin>(); + ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin != NULL) { origin->clear_tracked_camera_if(this); } @@ -60,7 +60,7 @@ String ARVRCamera::get_configuration_warning() const { return String(); // must be child node of ARVROrigin! - ARVROrigin *origin = get_parent()->cast_to<ARVROrigin>(); + ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin == NULL) { return TTR("ARVRCamera must have an ARVROrigin node as its parent"); }; @@ -209,7 +209,7 @@ String ARVRController::get_configuration_warning() const { return String(); // must be child node of ARVROrigin! - ARVROrigin *origin = get_parent()->cast_to<ARVROrigin>(); + ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin == NULL) { return TTR("ARVRController must have an ARVROrigin node as its parent"); }; @@ -321,7 +321,7 @@ String ARVRAnchor::get_configuration_warning() const { return String(); // must be child node of ARVROrigin! - ARVROrigin *origin = get_parent()->cast_to<ARVROrigin>(); + ARVROrigin *origin = Object::cast_to<ARVROrigin>(get_parent()); if (origin == NULL) { return TTR("ARVRAnchor must have an ARVROrigin node as its parent"); }; diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index 1ae6f552f4..6cfcc73823 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -266,7 +266,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { if (!sr[i].collider) continue; - Area *tarea = sr[i].collider->cast_to<Area>(); + Area *tarea = Object::cast_to<Area>(sr[i].collider); if (!tarea) continue; diff --git a/scene/3d/bone_attachment.cpp b/scene/3d/bone_attachment.cpp index b55b788b54..067e151c65 100644 --- a/scene/3d/bone_attachment.cpp +++ b/scene/3d/bone_attachment.cpp @@ -51,9 +51,7 @@ bool BoneAttachment::_set(const StringName &p_name, const Variant &p_value) { } void BoneAttachment::_get_property_list(List<PropertyInfo> *p_list) const { - Skeleton *parent = NULL; - if (get_parent()) - parent = get_parent()->cast_to<Skeleton>(); + Skeleton *parent = Object::cast_to<Skeleton>(get_parent()); if (parent) { @@ -73,8 +71,8 @@ void BoneAttachment::_get_property_list(List<PropertyInfo> *p_list) const { void BoneAttachment::_check_bind() { - if (get_parent() && get_parent()->cast_to<Skeleton>()) { - Skeleton *sk = get_parent()->cast_to<Skeleton>(); + if (Skeleton *sk = Object::cast_to<Skeleton>(get_parent())) { + int idx = sk->find_bone(bone_name); if (idx != -1) { sk->bind_child_node_to_bone(idx, this); @@ -88,8 +86,8 @@ void BoneAttachment::_check_unbind() { if (bound) { - if (get_parent() && get_parent()->cast_to<Skeleton>()) { - Skeleton *sk = get_parent()->cast_to<Skeleton>(); + if (Skeleton *sk = Object::cast_to<Skeleton>(get_parent())) { + int idx = sk->find_bone(bone_name); if (idx != -1) { sk->unbind_child_node_from_bone(idx, this); diff --git a/scene/3d/character_camera.cpp b/scene/3d/character_camera.cpp index ce047f91c2..9feda1b72f 100644 --- a/scene/3d/character_camera.cpp +++ b/scene/3d/character_camera.cpp @@ -369,7 +369,7 @@ void CharacterCamera::_notification(int p_what) { Node* parent = get_parent(); while (parent) { - PhysicsBody* p = parent->cast_to<PhysicsBody>(); + PhysicsBody* p = Object::cast_to<PhysicsBody>(parent); if (p) { target_body = p->get_body(); break; diff --git a/scene/3d/collision_polygon.cpp b/scene/3d/collision_polygon.cpp index 0c61c96d07..2087938de8 100644 --- a/scene/3d/collision_polygon.cpp +++ b/scene/3d/collision_polygon.cpp @@ -77,7 +77,7 @@ void CollisionPolygon::_notification(int p_what) { switch (p_what) { case NOTIFICATION_PARENTED: { - parent = get_parent()->cast_to<CollisionObject>(); + parent = Object::cast_to<CollisionObject>(get_parent()); if (parent) { owner_id = parent->create_shape_owner(this); _build_polygon(); @@ -147,7 +147,7 @@ bool CollisionPolygon::is_disabled() const { String CollisionPolygon::get_configuration_warning() const { - if (!get_parent()->cast_to<CollisionObject>()) { + if (!Object::cast_to<CollisionObject>(get_parent())) { return TTR("CollisionPolygon only serves to provide a collision shape to a CollisionObject derived node. Please only use it as a child of Area, StaticBody, RigidBody, KinematicBody, etc. to give them a shape."); } diff --git a/scene/3d/collision_shape.cpp b/scene/3d/collision_shape.cpp index 2aa6a95718..6a0ed08fee 100644 --- a/scene/3d/collision_shape.cpp +++ b/scene/3d/collision_shape.cpp @@ -50,9 +50,8 @@ void CollisionShape::make_convex_from_brothers() { for (int i = 0; i < p->get_child_count(); i++) { Node *n = p->get_child(i); - if (n->cast_to<MeshInstance>()) { + if (MeshInstance *mi = Object::cast_to<MeshInstance>(n)) { - MeshInstance *mi = n->cast_to<MeshInstance>(); Ref<Mesh> m = mi->get_mesh(); if (m.is_valid()) { @@ -68,7 +67,7 @@ void CollisionShape::_notification(int p_what) { switch (p_what) { case NOTIFICATION_PARENTED: { - parent = get_parent()->cast_to<CollisionObject>(); + parent = Object::cast_to<CollisionObject>(get_parent()); if (parent) { owner_id = parent->create_shape_owner(this); if (shape.is_valid()) { @@ -106,7 +105,7 @@ void CollisionShape::resource_changed(RES res) { String CollisionShape::get_configuration_warning() const { - if (!get_parent()->cast_to<CollisionObject>()) { + if (!Object::cast_to<CollisionObject>(get_parent())) { return TTR("CollisionShape only serves to provide a collision shape to a CollisionObject derived node. Please only use it as a child of Area, StaticBody, RigidBody, KinematicBody, etc. to give them a shape."); } diff --git a/scene/3d/gi_probe.cpp b/scene/3d/gi_probe.cpp index 460580d4fe..b5b6dfe7e3 100644 --- a/scene/3d/gi_probe.cpp +++ b/scene/3d/gi_probe.cpp @@ -1091,7 +1091,7 @@ void GIProbe::_plot_mesh(const Transform &p_xform, Ref<Mesh> &p_mesh, Baker *p_b void GIProbe::_find_meshes(Node *p_at_node, Baker *p_baker) { - MeshInstance *mi = p_at_node->cast_to<MeshInstance>(); + MeshInstance *mi = Object::cast_to<MeshInstance>(p_at_node); if (mi && mi->get_flag(GeometryInstance::FLAG_USE_BAKED_LIGHT)) { Ref<Mesh> mesh = mi->get_mesh(); if (mesh.is_valid()) { @@ -1113,9 +1113,8 @@ void GIProbe::_find_meshes(Node *p_at_node, Baker *p_baker) { } } - if (p_at_node->cast_to<Spatial>()) { + if (Spatial *s = Object::cast_to<Spatial>(p_at_node)) { - Spatial *s = p_at_node->cast_to<Spatial>(); Array meshes = p_at_node->call("get_meshes"); for (int i = 0; i < meshes.size(); i += 2) { diff --git a/scene/3d/interpolated_camera.cpp b/scene/3d/interpolated_camera.cpp index a481018890..4f28ac6b3e 100644 --- a/scene/3d/interpolated_camera.cpp +++ b/scene/3d/interpolated_camera.cpp @@ -46,7 +46,7 @@ void InterpolatedCamera::_notification(int p_what) { break; if (has_node(target)) { - Spatial *node = get_node(target)->cast_to<Spatial>(); + Spatial *node = Object::cast_to<Spatial>(get_node(target)); if (!node) break; @@ -56,8 +56,8 @@ void InterpolatedCamera::_notification(int p_what) { local_transform = local_transform.interpolate_with(target_xform, delta); set_global_transform(local_transform); - if (node->cast_to<Camera>()) { - Camera *cam = node->cast_to<Camera>(); + if (Camera *cam = Object::cast_to<Camera>(node)) { + if (cam->get_projection() == get_projection()) { float new_near = Math::lerp(get_znear(), cam->get_znear(), delta); @@ -83,7 +83,7 @@ void InterpolatedCamera::_notification(int p_what) { void InterpolatedCamera::_set_target(const Object *p_target) { ERR_FAIL_NULL(p_target); - set_target(p_target->cast_to<Spatial>()); + set_target(Object::cast_to<Spatial>(p_target)); } void InterpolatedCamera::set_target(const Spatial *p_target) { diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp index da25afbf57..578e3900fa 100644 --- a/scene/3d/mesh_instance.cpp +++ b/scene/3d/mesh_instance.cpp @@ -148,7 +148,7 @@ void MeshInstance::_resolve_skeleton_path() { if (skeleton_path.is_empty()) return; - Skeleton *skeleton = get_node(skeleton_path) ? get_node(skeleton_path)->cast_to<Skeleton>() : NULL; + Skeleton *skeleton = Object::cast_to<Skeleton>(get_node(skeleton_path)); if (skeleton) VisualServer::get_singleton()->instance_attach_skeleton(get_instance(), skeleton->get_skeleton()); } @@ -202,13 +202,13 @@ Node *MeshInstance::create_trimesh_collision_node() { void MeshInstance::create_trimesh_collision() { - StaticBody *static_body = create_trimesh_collision_node()->cast_to<StaticBody>(); + StaticBody *static_body = Object::cast_to<StaticBody>(create_trimesh_collision_node()); ERR_FAIL_COND(!static_body); static_body->set_name(String(get_name()) + "_col"); add_child(static_body); if (get_owner()) { - CollisionShape *cshape = static_body->get_child(0)->cast_to<CollisionShape>(); + CollisionShape *cshape = Object::cast_to<CollisionShape>(static_body->get_child(0)); static_body->set_owner(get_owner()); cshape->set_owner(get_owner()); } @@ -232,13 +232,13 @@ Node *MeshInstance::create_convex_collision_node() { void MeshInstance::create_convex_collision() { - StaticBody *static_body = create_convex_collision_node()->cast_to<StaticBody>(); + StaticBody *static_body = Object::cast_to<StaticBody>(create_convex_collision_node()); ERR_FAIL_COND(!static_body); static_body->set_name(String(get_name()) + "_col"); add_child(static_body); if (get_owner()) { - CollisionShape *cshape = static_body->get_child(0)->cast_to<CollisionShape>(); + CollisionShape *cshape = Object::cast_to<CollisionShape>(static_body->get_child(0)); static_body->set_owner(get_owner()); cshape->set_owner(get_owner()); } diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp index a1183326d7..1d74c7bbcc 100644 --- a/scene/3d/navigation.cpp +++ b/scene/3d/navigation.cpp @@ -584,7 +584,7 @@ Vector3 Navigation::get_closest_point_to_segment(const Vector3 &p_from, const Ve } if (closest_navmesh && closest_navmesh->owner) { - //print_line("navmesh is: "+closest_navmesh->owner->cast_to<Node>()->get_name()); + //print_line("navmesh is: "+Object::cast_to<Node>(closest_navmesh->owner)->get_name()); } return closest_point; diff --git a/scene/3d/navigation_mesh.cpp b/scene/3d/navigation_mesh.cpp index 5d4568f5d3..46d177df71 100644 --- a/scene/3d/navigation_mesh.cpp +++ b/scene/3d/navigation_mesh.cpp @@ -247,7 +247,7 @@ void NavigationMeshInstance::set_enabled(bool p_enabled) { } if (debug_view) { - MeshInstance *dm = debug_view->cast_to<MeshInstance>(); + MeshInstance *dm = Object::cast_to<MeshInstance>(debug_view); if (is_enabled()) { dm->set_material_override(get_tree()->get_debug_navigation_material()); } else { @@ -273,7 +273,7 @@ void NavigationMeshInstance::_notification(int p_what) { Spatial *c = this; while (c) { - navigation = c->cast_to<Navigation>(); + navigation = Object::cast_to<Navigation>(c); if (navigation) { if (enabled && navmesh.is_valid()) { @@ -342,7 +342,7 @@ void NavigationMeshInstance::set_navigation_mesh(const Ref<NavigationMesh> &p_na } if (debug_view && navmesh.is_valid()) { - debug_view->cast_to<MeshInstance>()->set_mesh(navmesh->get_debug_mesh()); + Object::cast_to<MeshInstance>(debug_view)->set_mesh(navmesh->get_debug_mesh()); } update_gizmo(); @@ -365,10 +365,10 @@ String NavigationMeshInstance::get_configuration_warning() const { const Spatial *c = this; while (c) { - if (c->cast_to<Navigation>()) + if (Object::cast_to<Navigation>(c)) return String(); - c = c->get_parent()->cast_to<Spatial>(); + c = Object::cast_to<Spatial>(c->get_parent()); } return TTR("NavigationMeshInstance must be a child or grandchild to a Navigation node. It only provides navigation data."); diff --git a/scene/3d/path.cpp b/scene/3d/path.cpp index 0ca7f96fd7..19c9761091 100644 --- a/scene/3d/path.cpp +++ b/scene/3d/path.cpp @@ -174,8 +174,7 @@ void PathFollow::_notification(int p_what) { Node *parent = get_parent(); if (parent) { - path = parent->cast_to<Path>(); - if (path) { + if ((path = Object::cast_to<Path>(parent))) { _update_transform(); } } diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 402cd6314b..a1bee9a0ed 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -116,7 +116,7 @@ bool PhysicsBody::get_collision_layer_bit(int p_bit) const { void PhysicsBody::add_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); - PhysicsBody *physics_body = p_node->cast_to<PhysicsBody>(); + PhysicsBody *physics_body = Object::cast_to<PhysicsBody>(p_node); if (!physics_body) { ERR_EXPLAIN("Collision exception only works between two objects of PhysicsBody type"); } @@ -127,7 +127,7 @@ void PhysicsBody::add_collision_exception_with(Node *p_node) { void PhysicsBody::remove_collision_exception_with(Node *p_node) { ERR_FAIL_NULL(p_node); - PhysicsBody *physics_body = p_node->cast_to<PhysicsBody>(); + PhysicsBody *physics_body = Object::cast_to<PhysicsBody>(p_node); if (!physics_body) { ERR_EXPLAIN("Collision exception only works between two objects of PhysicsBody type"); } @@ -254,7 +254,7 @@ StaticBody::~StaticBody() { void RigidBody::_body_enter_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = contact_monitor->body_map.find(p_id); @@ -278,7 +278,7 @@ void RigidBody::_body_enter_tree(ObjectID p_id) { void RigidBody::_body_exit_tree(ObjectID p_id) { Object *obj = ObjectDB::get_instance(p_id); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); ERR_FAIL_COND(!node); Map<ObjectID, BodyState>::Element *E = contact_monitor->body_map.find(p_id); ERR_FAIL_COND(!E); @@ -303,7 +303,7 @@ void RigidBody::_body_inout(int p_status, ObjectID p_instance, int p_body_shape, ObjectID objid = p_instance; Object *obj = ObjectDB::get_instance(objid); - Node *node = obj ? obj->cast_to<Node>() : NULL; + Node *node = Object::cast_to<Node>(obj); Map<ObjectID, BodyState>::Element *E = contact_monitor->body_map.find(objid); @@ -369,7 +369,7 @@ void RigidBody::_direct_state_changed(Object *p_state) { //eh.. fuck #ifdef DEBUG_ENABLED - state = p_state->cast_to<PhysicsDirectBodyState>(); + state = Object::cast_to<PhysicsDirectBodyState>(p_state); #else state = (PhysicsDirectBodyState *)p_state; //trust it #endif @@ -1105,7 +1105,7 @@ Object *KinematicBody::get_collision_collider_shape(int p_collision) const { ERR_FAIL_INDEX_V(p_collision, colliders.size(), NULL); Object *collider = get_collision_collider(p_collision); if (collider) { - CollisionObject *obj2d = collider->cast_to<CollisionObject>(); + CollisionObject *obj2d = Object::cast_to<CollisionObject>(collider); if (obj2d) { uint32_t owner = shape_find_owner(colliders[p_collision].collider_shape); return obj2d->shape_owner_get_owner(owner); diff --git a/scene/3d/physics_joint.cpp b/scene/3d/physics_joint.cpp index 55007c6dc6..af6e7f48fa 100644 --- a/scene/3d/physics_joint.cpp +++ b/scene/3d/physics_joint.cpp @@ -55,8 +55,8 @@ void Joint::_update_joint(bool p_only_free) { if (!node_a && !node_b) return; - PhysicsBody *body_a = node_a ? node_a->cast_to<PhysicsBody>() : (PhysicsBody *)NULL; - PhysicsBody *body_b = node_b ? node_b->cast_to<PhysicsBody>() : (PhysicsBody *)NULL; + PhysicsBody *body_a = Object::cast_to<PhysicsBody>(node_a); + PhysicsBody *body_b = Object::cast_to<PhysicsBody>(node_b); if (!body_a && !body_b) return; @@ -1153,8 +1153,8 @@ void PhysicsJoint::_disconnect() { Node *nA = get_node(body_A); Node *nB = get_node(body_B); - PhysicsBody *A = nA?nA->cast_to<PhysicsBody>():NULL; - PhysicsBody *B = nA?nB->cast_to<PhysicsBody>():NULL; + PhysicsBody *A = Object::cast_to<PhysicsBody>(nA); + PhysicsBody *B = Object::cast_to<PhysicsBody>(nB); if (!A ||!B) return; @@ -1173,8 +1173,8 @@ void PhysicsJoint::_connect() { Node *nA = get_node(body_A); Node *nB = get_node(body_B); - PhysicsBody *A = nA?nA->cast_to<PhysicsBody>():NULL; - PhysicsBody *B = nA?nB->cast_to<PhysicsBody>():NULL; + PhysicsBody *A = Object::cast_to<PhysicsBody>(nA); + PhysicsBody *B = Object::cast_to<PhysicsBody>(nB); if (!A && !B) return; diff --git a/scene/3d/ray_cast.cpp b/scene/3d/ray_cast.cpp index b0aab6cc4d..019bb219ee 100644 --- a/scene/3d/ray_cast.cpp +++ b/scene/3d/ray_cast.cpp @@ -196,7 +196,7 @@ void RayCast::add_exception_rid(const RID &p_rid) { void RayCast::add_exception(const Object *p_object) { ERR_FAIL_NULL(p_object); - CollisionObject *co = ((Object *)p_object)->cast_to<CollisionObject>(); + const CollisionObject *co = Object::cast_to<CollisionObject>(p_object); if (!co) return; add_exception_rid(co->get_rid()); @@ -210,7 +210,7 @@ void RayCast::remove_exception_rid(const RID &p_rid) { void RayCast::remove_exception(const Object *p_object) { ERR_FAIL_NULL(p_object); - CollisionObject *co = ((Object *)p_object)->cast_to<CollisionObject>(); + const CollisionObject *co = Object::cast_to<CollisionObject>(p_object); if (!co) return; remove_exception_rid(co->get_rid()); diff --git a/scene/3d/remote_transform.cpp b/scene/3d/remote_transform.cpp index 492930ea9b..a4dfeb8adf 100644 --- a/scene/3d/remote_transform.cpp +++ b/scene/3d/remote_transform.cpp @@ -51,11 +51,7 @@ void RemoteTransform::_update_remote() { if (!cache) return; - Object *obj = ObjectDB::get_instance(cache); - if (!obj) - return; - - Spatial *n = obj->cast_to<Spatial>(); + Spatial *n = Object::cast_to<Spatial>(ObjectDB::get_instance(cache)); if (!n) return; @@ -177,7 +173,7 @@ bool RemoteTransform::get_update_scale() const { String RemoteTransform::get_configuration_warning() const { - if (!has_node(remote_node) || !get_node(remote_node) || !get_node(remote_node)->cast_to<Spatial>()) { + if (!has_node(remote_node) || !Object::cast_to<Spatial>(get_node(remote_node))) { return TTR("Path property must point to a valid Spatial node to work."); } diff --git a/scene/3d/room_instance.cpp b/scene/3d/room_instance.cpp index c5ea6c54da..3e6a8d3c38 100644 --- a/scene/3d/room_instance.cpp +++ b/scene/3d/room_instance.cpp @@ -45,7 +45,7 @@ void Room::_notification(int p_what) { while (parent_room) { - Room *r = parent_room->cast_to<Room>(); + Room *r = Object::cast_to<Room>(parent_room); if (r) { level = r->level + 1; @@ -103,7 +103,7 @@ Ref<RoomBounds> Room::get_room() const { void Room::_parse_node_faces(PoolVector<Face3> &all_faces, const Node *p_node) const { - const VisualInstance *vi = p_node->cast_to<VisualInstance>(); + const VisualInstance *vi = Object::cast_to<VisualInstance>(p_node); if (vi) { PoolVector<Face3> faces = vi->get_faces(FACES_ENCLOSING); diff --git a/scene/3d/skeleton.cpp b/scene/3d/skeleton.cpp index cee97af244..94db247d7a 100644 --- a/scene/3d/skeleton.cpp +++ b/scene/3d/skeleton.cpp @@ -111,7 +111,7 @@ bool Skeleton::_get(const StringName &p_path, Variant &r_ret) const { Object *obj = ObjectDB::get_instance(E->get()); ERR_CONTINUE(!obj); - Node *node = obj->cast_to<Node>(); + Node *node = Object::cast_to<Node>(obj); ERR_CONTINUE(!node); NodePath path = get_path_to(node); children.push_back(path); @@ -245,7 +245,7 @@ void Skeleton::_notification(int p_what) { Object *obj = ObjectDB::get_instance(E->get()); ERR_CONTINUE(!obj); - Spatial *sp = obj->cast_to<Spatial>(); + Spatial *sp = Object::cast_to<Spatial>(obj); ERR_CONTINUE(!sp); sp->set_transform(b.pose_global); } @@ -433,7 +433,7 @@ void Skeleton::get_bound_child_nodes_to_bone(int p_bone, List<Node *> *p_bound) Object *obj = ObjectDB::get_instance(E->get()); ERR_CONTINUE(!obj); - p_bound->push_back(obj->cast_to<Node>()); + p_bound->push_back(Object::cast_to<Node>(obj)); } } diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index 6498238e12..9e85a8a5b1 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -128,7 +128,7 @@ void Spatial::_notification(int p_what) { Node *p = get_parent(); if (p) - data.parent = p->cast_to<Spatial>(); + data.parent = Object::cast_to<Spatial>(p); if (data.parent) data.C = data.parent->data.children.push_back(this); @@ -167,7 +167,7 @@ void Spatial::_notification(int p_what) { data.viewport = NULL; Node *parent = get_parent(); while (parent && !data.viewport) { - data.viewport = parent->cast_to<Viewport>(); + data.viewport = Object::cast_to<Viewport>(parent); parent = parent->get_parent(); } @@ -284,7 +284,7 @@ Transform Spatial::get_global_transform() const { #if 0 void Spatial::add_child_notify(Node *p_child) { /* - Spatial *s=p_child->cast_to<Spatial>(); + Spatial *s=Object::cast_to<Spatial>(p_child); if (!s) return; @@ -299,7 +299,7 @@ void Spatial::add_child_notify(Node *p_child) { void Spatial::remove_child_notify(Node *p_child) { /* - Spatial *s=p_child->cast_to<Spatial>(); + Spatial *s=Object::cast_to<Spatial>(p_child); if (!s) return; diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index e45cb6d5b9..a49fd17746 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -70,13 +70,9 @@ void SpriteBase3D::_notification(int p_what) { if (!pending_update) _im_update(); - Node *parent = get_parent(); - if (parent) { - - parent_sprite = parent->cast_to<SpriteBase3D>(); - if (parent_sprite) { - pI = parent_sprite->children.push_back(this); - } + parent_sprite = Object::cast_to<SpriteBase3D>(get_parent()); + if (parent_sprite) { + pI = parent_sprite->children.push_back(this); } } diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp index 2a41c8f30e..69b938b886 100644 --- a/scene/3d/vehicle_body.cpp +++ b/scene/3d/vehicle_body.cpp @@ -81,9 +81,7 @@ void VehicleWheel::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - if (!get_parent()) - return; - VehicleBody *cb = get_parent()->cast_to<VehicleBody>(); + VehicleBody *cb = Object::cast_to<VehicleBody>(get_parent()); if (!cb) return; body = cb; @@ -96,9 +94,7 @@ void VehicleWheel::_notification(int p_what) { } if (p_what == NOTIFICATION_EXIT_TREE) { - if (!get_parent()) - return; - VehicleBody *cb = get_parent()->cast_to<VehicleBody>(); + VehicleBody *cb = Object::cast_to<VehicleBody>(get_parent()); if (!cb) return; cb->wheels.erase(this); @@ -416,7 +412,7 @@ real_t VehicleBody::_ray_cast(int p_idx, PhysicsDirectBodyState *s) { wheel.m_raycastInfo.m_isInContact = true; if (rr.collider) - wheel.m_raycastInfo.m_groundObject = rr.collider->cast_to<PhysicsBody>(); + wheel.m_raycastInfo.m_groundObject = Object::cast_to<PhysicsBody>(rr.collider); real_t hitDistance = param * raylen; wheel.m_raycastInfo.m_suspensionLength = hitDistance - wheel.m_wheelRadius; @@ -804,7 +800,7 @@ void VehicleBody::_update_friction(PhysicsDirectBodyState *s) { void VehicleBody::_direct_state_changed(Object *p_state) { - PhysicsDirectBodyState *s = p_state->cast_to<PhysicsDirectBodyState>(); + PhysicsDirectBodyState *s = Object::cast_to<PhysicsDirectBodyState>(p_state); set_ignore_transform_notification(true); set_global_transform(s->get_transform()); diff --git a/scene/3d/visibility_notifier.cpp b/scene/3d/visibility_notifier.cpp index 0b77968dca..76bca2b975 100644 --- a/scene/3d/visibility_notifier.cpp +++ b/scene/3d/visibility_notifier.cpp @@ -151,7 +151,7 @@ void VisibilityEnabler::_find_nodes(Node *p_node) { if (enabler[ENABLER_FREEZE_BODIES]) { - RigidBody *rb = p_node->cast_to<RigidBody>(); + RigidBody *rb = Object::cast_to<RigidBody>(p_node); if (rb && ((rb->get_mode() == RigidBody::MODE_CHARACTER || (rb->get_mode() == RigidBody::MODE_RIGID && !rb->is_able_to_sleep())))) { add = true; @@ -161,7 +161,7 @@ void VisibilityEnabler::_find_nodes(Node *p_node) { if (enabler[ENABLER_PAUSE_ANIMATIONS]) { - AnimationPlayer *ap = p_node->cast_to<AnimationPlayer>(); + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node); if (ap) { add = true; } @@ -219,14 +219,14 @@ void VisibilityEnabler::_change_node_state(Node *p_node, bool p_enabled) { ERR_FAIL_COND(!nodes.has(p_node)); { - RigidBody *rb = p_node->cast_to<RigidBody>(); + RigidBody *rb = Object::cast_to<RigidBody>(p_node); if (rb) rb->set_sleeping(!p_enabled); } { - AnimationPlayer *ap = p_node->cast_to<AnimationPlayer>(); + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node); if (ap) { diff --git a/scene/3d/visual_instance.cpp b/scene/3d/visual_instance.cpp index 7d61006529..b9e4488998 100644 --- a/scene/3d/visual_instance.cpp +++ b/scene/3d/visual_instance.cpp @@ -57,16 +57,16 @@ void VisualInstance::_notification(int p_what) { // CHECK ROOM Spatial *parent = get_parent_spatial(); Room *room = NULL; - bool is_geom = cast_to<GeometryInstance>(); + bool is_geom = Object::cast_to<GeometryInstance>(this); /* while(parent) { - room = parent->cast_to<Room>(); + room = Object::cast_to<Room>(parent); if (room) break; - if (is_geom && parent->cast_to<BakedLightSampler>()) { - VS::get_singleton()->instance_geometry_set_baked_light_sampler(get_instance(),parent->cast_to<BakedLightSampler>()->get_instance()); + if (is_geom && Object::cast_to<BakedLightSampler>(parent)) { + VS::get_singleton()->instance_geometry_set_baked_light_sampler(get_instance(),Object::cast_to<BakedLightSampler>(parent)->get_instance()); break; } @@ -79,7 +79,7 @@ void VisualInstance::_notification(int p_what) { } // CHECK SKELETON => moving skeleton attaching logic to MeshInstance /* - Skeleton *skeleton=get_parent()?get_parent()->cast_to<Skeleton>():NULL; + Skeleton *skeleton=Object::cast_to<Skeleton>(get_parent()); if (skeleton) VisualServer::get_singleton()->instance_attach_skeleton( instance, skeleton->get_skeleton() ); */ diff --git a/scene/animation/animation_cache.cpp b/scene/animation/animation_cache.cpp index 31fee0e347..557858f24c 100644 --- a/scene/animation/animation_cache.cpp +++ b/scene/animation/animation_cache.cpp @@ -120,7 +120,7 @@ void AnimationCache::_update_cache() { StringName property = np.get_property(); String ps = property; - Spatial *sp = node->cast_to<Spatial>(); + Spatial *sp = Object::cast_to<Spatial>(node); if (!sp) { @@ -131,7 +131,7 @@ void AnimationCache::_update_cache() { if (ps != "") { - Skeleton *sk = node->cast_to<Skeleton>(); + Skeleton *sk = Object::cast_to<Skeleton>(node); if (!sk) { path_cache.push_back(Path()); diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 3acb11541f..b941157756 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -251,9 +251,9 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) { uint32_t id = resource.is_valid() ? resource->get_instance_id() : child->get_instance_id(); int bone_idx = -1; - if (a->track_get_path(i).get_property() && child->cast_to<Skeleton>()) { + if (a->track_get_path(i).get_property() && Object::cast_to<Skeleton>(child)) { - bone_idx = child->cast_to<Skeleton>()->find_bone(a->track_get_path(i).get_property()); + bone_idx = Object::cast_to<Skeleton>(child)->find_bone(a->track_get_path(i).get_property()); if (bone_idx == -1) { continue; @@ -280,14 +280,14 @@ void AnimationPlayer::_generate_node_caches(AnimationData *p_anim) { p_anim->node_cache[i]->path = a->track_get_path(i); p_anim->node_cache[i]->node = child; p_anim->node_cache[i]->resource = resource; - p_anim->node_cache[i]->node_2d = child->cast_to<Node2D>(); + p_anim->node_cache[i]->node_2d = Object::cast_to<Node2D>(child); if (a->track_get_type(i) == Animation::TYPE_TRANSFORM) { // special cases and caches for transform tracks // cache spatial - p_anim->node_cache[i]->spatial = child->cast_to<Spatial>(); + p_anim->node_cache[i]->spatial = Object::cast_to<Spatial>(child); // cache skeleton - p_anim->node_cache[i]->skeleton = child->cast_to<Skeleton>(); + p_anim->node_cache[i]->skeleton = Object::cast_to<Skeleton>(child); if (p_anim->node_cache[i]->skeleton) { StringName bone_name = a->track_get_path(i).get_property(); diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index fd8b33e666..1c4a66a607 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -1487,8 +1487,8 @@ AnimationTreePlayer::Track *AnimationTreePlayer::_find_track(const NodePath &p_p if (p_path.get_property()) { - if (child->cast_to<Skeleton>()) - bone_idx = child->cast_to<Skeleton>()->find_bone(p_path.get_property()); + if (Object::cast_to<Skeleton>(child)) + bone_idx = Object::cast_to<Skeleton>(child)->find_bone(p_path.get_property()); if (bone_idx == -1) property = p_path.get_property(); } @@ -1503,8 +1503,8 @@ AnimationTreePlayer::Track *AnimationTreePlayer::_find_track(const NodePath &p_p Track tr; tr.id = id; tr.object = resource.is_valid() ? (Object *)resource.ptr() : (Object *)child; - tr.skeleton = child->cast_to<Skeleton>(); - tr.spatial = child->cast_to<Spatial>(); + tr.skeleton = Object::cast_to<Skeleton>(child); + tr.spatial = Object::cast_to<Spatial>(child); tr.bone_idx = bone_idx; tr.property = property; @@ -1644,7 +1644,7 @@ void AnimationTreePlayer::_update_sources() { ERR_FAIL_COND(!m); } - AnimationPlayer *ap = m->cast_to<AnimationPlayer>(); + AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(m); if (!ap) { diff --git a/scene/gui/box_container.cpp b/scene/gui/box_container.cpp index 2cc4be96a7..e0c73e4788 100644 --- a/scene/gui/box_container.cpp +++ b/scene/gui/box_container.cpp @@ -54,7 +54,7 @@ void BoxContainer::_resort() { Map<Control *, _MinSizeCache> min_size_cache; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; if (c->is_set_as_toplevel()) @@ -106,7 +106,7 @@ void BoxContainer::_resort() { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; if (c->is_set_as_toplevel()) @@ -159,7 +159,7 @@ void BoxContainer::_resort() { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; if (c->is_set_as_toplevel()) @@ -211,7 +211,7 @@ Size2 BoxContainer::get_minimum_size() const { bool first = true; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/button_group.cpp b/scene/gui/button_group.cpp index e54e810d7d..fbc2cd8cce 100644 --- a/scene/gui/button_group.cpp +++ b/scene/gui/button_group.cpp @@ -56,7 +56,7 @@ void ButtonGroup::set_pressed_button(BaseButton *p_button) { void ButtonGroup::_pressed(Object *p_button) { ERR_FAIL_NULL(p_button); - BaseButton *b=p_button->cast_to<BaseButton>(); + BaseButton *b=Object::cast_to<BaseButton>(p_button); ERR_FAIL_COND(!b); for(Set<BaseButton*>::Element *E=buttons.front();E;E=E->next()) { diff --git a/scene/gui/center_container.cpp b/scene/gui/center_container.cpp index bdc811870d..2bd07d3849 100644 --- a/scene/gui/center_container.cpp +++ b/scene/gui/center_container.cpp @@ -36,7 +36,7 @@ Size2 CenterContainer::get_minimum_size() const { Size2 ms; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -69,7 +69,7 @@ void CenterContainer::_notification(int p_what) { Size2 size = get_size(); for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 5257f9df35..cdb4a19232 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -56,11 +56,10 @@ void ColorPicker::_notification(int p_what) { } break; case NOTIFICATION_VISIBILITY_CHANGED: { - if (get_parent()) { - Popup *p = get_parent()->cast_to<Popup>(); - if (p) - p->set_size(Size2(get_combined_minimum_size().width + get_constant("margin") * 2, get_combined_minimum_size().height + get_constant("margin") * 2)); - } + + Popup *p = Object::cast_to<Popup>(get_parent()); + if (p) + p->set_size(Size2(get_combined_minimum_size().width + get_constant("margin") * 2, get_combined_minimum_size().height + get_constant("margin") * 2)); } break; case MainLoop::NOTIFICATION_WM_QUIT_REQUEST: { diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp index 4bbe15ed7e..31a03dc597 100644 --- a/scene/gui/container.cpp +++ b/scene/gui/container.cpp @@ -43,7 +43,7 @@ void Container::add_child_notify(Node *p_child) { Control::add_child_notify(p_child); - Control *control = p_child->cast_to<Control>(); + Control *control = Object::cast_to<Control>(p_child); if (!control) return; @@ -57,7 +57,7 @@ void Container::move_child_notify(Node *p_child) { Control::move_child_notify(p_child); - if (!p_child->cast_to<Control>()) + if (!Object::cast_to<Control>(p_child)) return; queue_sort(); @@ -67,7 +67,7 @@ void Container::remove_child_notify(Node *p_child) { Control::remove_child_notify(p_child); - Control *control = p_child->cast_to<Control>(); + Control *control = Object::cast_to<Control>(p_child); if (!control) return; diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 36fc9a6b3a..96cda69bb2 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -353,7 +353,7 @@ void Control::_resize(const Size2 &p_size) { void Control::add_child_notify(Node *p_child) { - Control *child_c = p_child->cast_to<Control>(); + Control *child_c = Object::cast_to<Control>(p_child); if (!child_c) return; @@ -364,7 +364,7 @@ void Control::add_child_notify(Node *p_child) { void Control::remove_child_notify(Node *p_child) { - Control *child_c = p_child->cast_to<Control>(); + Control *child_c = Object::cast_to<Control>(p_child); if (!child_c) return; @@ -398,7 +398,7 @@ void Control::_notification(int p_notification) { case NOTIFICATION_ENTER_CANVAS: { - data.parent = get_parent()->cast_to<Control>(); + data.parent = Object::cast_to<Control>(get_parent()); if (is_set_as_toplevel()) { data.SI = get_viewport()->_gui_add_subwindow_control(this); @@ -421,13 +421,13 @@ void Control::_notification(int p_notification) { if (!parent) break; - CanvasItem *ci = parent->cast_to<CanvasItem>(); + CanvasItem *ci = Object::cast_to<CanvasItem>(parent); if (ci && ci->is_set_as_toplevel()) { subwindow = true; break; } - parent_control = parent->cast_to<Control>(); + parent_control = Object::cast_to<Control>(parent); if (parent_control) { break; @@ -624,7 +624,7 @@ Variant Control::get_drag_data(const Point2 &p_point) { if (data.drag_owner) { Object *obj = ObjectDB::get_instance(data.drag_owner); if (obj) { - Control *c = obj->cast_to<Control>(); + Control *c = Object::cast_to<Control>(obj); return c->call("get_drag_data_fw", p_point, this); } } @@ -646,7 +646,7 @@ bool Control::can_drop_data(const Point2 &p_point, const Variant &p_data) const if (data.drag_owner) { Object *obj = ObjectDB::get_instance(data.drag_owner); if (obj) { - Control *c = obj->cast_to<Control>(); + Control *c = Object::cast_to<Control>(obj); return c->call("can_drop_data_fw", p_point, p_data, this); } } @@ -667,7 +667,7 @@ void Control::drop_data(const Point2 &p_point, const Variant &p_data) { if (data.drag_owner) { Object *obj = ObjectDB::get_instance(data.drag_owner); if (obj) { - Control *c = obj->cast_to<Control>(); + Control *c = Object::cast_to<Control>(obj); c->call("drop_data_fw", p_point, p_data, this); return; } @@ -749,7 +749,7 @@ Ref<Texture> Control::get_icon(const StringName &p_name, const StringName &p_typ class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -785,7 +785,7 @@ Ref<Shader> Control::get_shader(const StringName &p_name, const StringName &p_ty class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -821,7 +821,7 @@ Ref<StyleBox> Control::get_stylebox(const StringName &p_name, const StringName & class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -858,7 +858,7 @@ Ref<Font> Control::get_font(const StringName &p_name, const StringName &p_type) if (theme_owner->data.theme->get_default_theme_font().is_valid()) return theme_owner->data.theme->get_default_theme_font(); - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -892,7 +892,7 @@ Color Control::get_color(const StringName &p_name, const StringName &p_type) con class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -927,7 +927,7 @@ int Control::get_constant(const StringName &p_name, const StringName &p_type) co class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1015,7 +1015,7 @@ bool Control::has_icon(const StringName &p_name, const StringName &p_type) const class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1049,7 +1049,7 @@ bool Control::has_shader(const StringName &p_name, const StringName &p_type) con class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1082,7 +1082,7 @@ bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) c class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1115,7 +1115,7 @@ bool Control::has_font(const StringName &p_name, const StringName &p_type) const class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1149,7 +1149,7 @@ bool Control::has_color(const StringName &p_name, const StringName &p_type) cons class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1183,7 +1183,7 @@ bool Control::has_constant(const StringName &p_name, const StringName &p_type) c class_name = ClassDB::get_parent_class_nocheck(class_name); } - Control *parent = theme_owner->get_parent() ? theme_owner->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(theme_owner->get_parent()); if (parent) theme_owner = parent->data.theme_owner; @@ -1687,7 +1687,7 @@ static Control *_next_control(Control *p_from) { if (p_from->is_set_as_toplevel()) return NULL; // can't go above - Control *parent = p_from->get_parent() ? p_from->get_parent()->cast_to<Control>() : NULL; + Control *parent = Object::cast_to<Control>(p_from->get_parent()); if (!parent) { @@ -1698,7 +1698,7 @@ static Control *_next_control(Control *p_from) { ERR_FAIL_INDEX_V(next, parent->get_child_count(), NULL); for (int i = (next + 1); i < parent->get_child_count(); i++) { - Control *c = parent->get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(parent->get_child(i)); if (!c || !c->is_visible_in_tree() || c->is_set_as_toplevel()) continue; @@ -1721,7 +1721,7 @@ Control *Control::find_next_valid_focus() const { for (int i = 0; i < from->get_child_count(); i++) { - Control *c = from->get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(from->get_child(i)); if (!c || !c->is_visible_in_tree() || c->is_set_as_toplevel()) { continue; } @@ -1739,10 +1739,8 @@ Control *Control::find_next_valid_focus() const { if (!next_child) { //nothing else.. go up and find either window or subwindow next_child = const_cast<Control *>(this); while (next_child && !next_child->is_set_as_toplevel()) { - if (next_child->get_parent()) { - next_child = next_child->get_parent()->cast_to<Control>(); - } else - next_child = NULL; + + next_child = cast_to<Control>(next_child->get_parent()); } if (!next_child) { @@ -1776,7 +1774,7 @@ static Control *_prev_control(Control *p_from) { Control *child = NULL; for (int i = p_from->get_child_count() - 1; i >= 0; i--) { - Control *c = p_from->get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(p_from->get_child(i)); if (!c || !c->is_visible_in_tree() || c->is_set_as_toplevel()) continue; @@ -1800,7 +1798,7 @@ Control *Control::find_prev_valid_focus() const { Control *prev_child = NULL; - if (from->is_set_as_toplevel() || !from->get_parent() || !from->get_parent()->cast_to<Control>()) { + if (from->is_set_as_toplevel() || !Object::cast_to<Control>(from->get_parent())) { //find last of the childs @@ -1810,7 +1808,7 @@ Control *Control::find_prev_valid_focus() const { for (int i = (from->get_position_in_parent() - 1); i >= 0; i--) { - Control *c = from->get_parent()->get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(from->get_parent()->get_child(i)); if (!c || !c->is_visible_in_tree() || c->is_set_as_toplevel()) { continue; @@ -1822,7 +1820,7 @@ Control *Control::find_prev_valid_focus() const { if (!prev_child) { - prev_child = from->get_parent()->cast_to<Control>(); + prev_child = Object::cast_to<Control>(from->get_parent()); } else { prev_child = _prev_control(prev_child); @@ -1912,14 +1910,14 @@ void Control::_modal_stack_remove() { void Control::_propagate_theme_changed(CanvasItem *p_at, Control *p_owner, bool p_assign) { - Control *c = p_at->cast_to<Control>(); + Control *c = Object::cast_to<Control>(p_at); if (c && c != p_owner && c->data.theme.is_valid()) // has a theme, this can't be propagated return; for (int i = 0; i < p_at->get_child_count(); i++) { - CanvasItem *child = p_at->get_child(i)->cast_to<CanvasItem>(); + CanvasItem *child = Object::cast_to<CanvasItem>(p_at->get_child(i)); if (child) { _propagate_theme_changed(child, p_owner, p_assign); } @@ -1955,7 +1953,7 @@ void Control::set_theme(const Ref<Theme> &p_theme) { _propagate_theme_changed(this, this); } else { - Control *parent = get_parent() ? get_parent()->cast_to<Control>() : NULL; + Control *parent = cast_to<Control>(get_parent()); if (parent && parent->data.theme_owner) { _propagate_theme_changed(this, parent->data.theme_owner); } else { @@ -2038,7 +2036,7 @@ Control *Control::_get_focus_neighbour(Margin p_margin, int p_count) { Control *c = NULL; Node *n = get_node(data.focus_neighbour[p_margin]); if (n) { - c = n->cast_to<Control>(); + c = Object::cast_to<Control>(n); if (!c) { @@ -2095,7 +2093,7 @@ Control *Control::_get_focus_neighbour(Margin p_margin, int p_count) { while (base) { - Control *c = base->cast_to<Control>(); + Control *c = Object::cast_to<Control>(base); if (c) { if (c->data.SI) break; @@ -2115,10 +2113,10 @@ Control *Control::_get_focus_neighbour(Margin p_margin, int p_count) { void Control::_window_find_focus_neighbour(const Vector2 &p_dir, Node *p_at, const Point2 *p_points, float p_min, float &r_closest_dist, Control **r_closest) { - if (p_at->cast_to<Viewport>()) + if (Object::cast_to<Viewport>(p_at)) return; //bye - Control *c = p_at->cast_to<Control>(); + Control *c = Object::cast_to<Control>(p_at); if (c && c != this && c->get_focus_mode() == FOCUS_ALL && c->is_visible_in_tree()) { @@ -2168,7 +2166,7 @@ void Control::_window_find_focus_neighbour(const Vector2 &p_dir, Node *p_at, con for (int i = 0; i < p_at->get_child_count(); i++) { Node *child = p_at->get_child(i); - Control *childc = child->cast_to<Control>(); + Control *childc = Object::cast_to<Control>(child); if (childc && childc->data.SI) continue; //subwindow, ignore _window_find_focus_neighbour(p_dir, p_at->get_child(i), p_points, p_min, r_closest_dist, r_closest); @@ -2363,7 +2361,7 @@ Control *Control::get_root_parent_control() const { while (ci) { - const Control *c = ci->cast_to<Control>(); + const Control *c = Object::cast_to<Control>(ci); if (c) { root = c; diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index b911a18312..88d3860fb0 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -60,13 +60,13 @@ void WindowDialog::_fix_size() { float right = 0; // Check validity, because the theme could contain a different type of StyleBox if (panel->get_class() == "StyleBoxTexture") { - Ref<StyleBoxTexture> panel_texture = panel->cast_to<StyleBoxTexture>(); + Ref<StyleBoxTexture> panel_texture = Object::cast_to<StyleBoxTexture>(*panel); top = panel_texture->get_expand_margin_size(MARGIN_TOP); left = panel_texture->get_expand_margin_size(MARGIN_LEFT); bottom = panel_texture->get_expand_margin_size(MARGIN_BOTTOM); right = panel_texture->get_expand_margin_size(MARGIN_RIGHT); } else if (panel->get_class() == "StyleBoxFlat") { - Ref<StyleBoxFlat> panel_flat = panel->cast_to<StyleBoxFlat>(); + Ref<StyleBoxFlat> panel_flat = Object::cast_to<StyleBoxFlat>(*panel); top = panel_flat->get_expand_margin_size(MARGIN_TOP); left = panel_flat->get_expand_margin_size(MARGIN_LEFT); bottom = panel_flat->get_expand_margin_size(MARGIN_BOTTOM); @@ -424,7 +424,7 @@ void AcceptDialog::_update_child_rects() { Vector2 csize(size.x - margin * 2, size.y - margin * 3 - hminsize.y - label_size.height); for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; @@ -448,7 +448,7 @@ Size2 AcceptDialog::get_minimum_size() const { Size2 minsize = label->get_combined_minimum_size(); for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index ec1932ed5a..5703564ce2 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -134,7 +134,7 @@ void GraphEdit::_update_scroll_offset() { for (int i = 0; i < get_child_count(); i++) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -163,7 +163,7 @@ void GraphEdit::_update_scroll() { Rect2 screen; for (int i = 0; i < get_child_count(); i++) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -205,7 +205,7 @@ void GraphEdit::_update_scroll() { void GraphEdit::_graph_node_raised(Node *p_gn) { - GraphNode *gn = p_gn->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(p_gn); ERR_FAIL_COND(!gn); if (gn->is_comment()) { move_child(gn, 0); @@ -214,7 +214,7 @@ void GraphEdit::_graph_node_raised(Node *p_gn) { } int first_not_comment = 0; for (int i = 0; i < get_child_count(); i++) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (gn && !gn->is_comment()) { first_not_comment = i; break; @@ -228,7 +228,7 @@ void GraphEdit::_graph_node_raised(Node *p_gn) { void GraphEdit::_graph_node_moved(Node *p_gn) { - GraphNode *gn = p_gn->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(p_gn); ERR_FAIL_COND(!gn); top_layer->update(); update(); @@ -240,7 +240,7 @@ void GraphEdit::add_child_notify(Node *p_child) { Control::add_child_notify(p_child); top_layer->call_deferred("raise"); //top layer always on top! - GraphNode *gn = p_child->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(p_child); if (gn) { gn->set_scale(Vector2(zoom, zoom)); gn->connect("offset_changed", this, "_graph_node_moved", varray(gn)); @@ -256,7 +256,7 @@ void GraphEdit::remove_child_notify(Node *p_child) { Control::remove_child_notify(p_child); top_layer->call_deferred("raise"); //top layer always on top! - GraphNode *gn = p_child->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(p_child); if (gn) { gn->disconnect("offset_changed", this, "_graph_node_moved"); gn->disconnect("raise_request", this, "_graph_node_raised"); @@ -345,7 +345,7 @@ bool GraphEdit::_filter_input(const Point2 &p_point) { float grab_r = port->get_width() * 0.5 * grab_r_extend; for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -379,7 +379,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { float grab_r = port->get_width() * 0.5 * grab_r_extend; for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -395,20 +395,20 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { if (E->get().from == gn->get_name() && E->get().from_port == j) { Node *to = get_node(String(E->get().to)); - if (to && to->cast_to<GraphNode>()) { + if (Object::cast_to<GraphNode>(to)) { connecting_from = E->get().to; connecting_index = E->get().to_port; connecting_out = false; - connecting_type = to->cast_to<GraphNode>()->get_connection_input_type(E->get().to_port); - connecting_color = to->cast_to<GraphNode>()->get_connection_input_color(E->get().to_port); + connecting_type = Object::cast_to<GraphNode>(to)->get_connection_input_type(E->get().to_port); + connecting_color = Object::cast_to<GraphNode>(to)->get_connection_input_color(E->get().to_port); connecting_target = false; connecting_to = pos; just_disconected = true; emit_signal("disconnection_request", E->get().from, E->get().from_port, E->get().to, E->get().to_port); to = get_node(String(connecting_from)); //maybe it was erased - if (to && to->cast_to<GraphNode>()) { + if (Object::cast_to<GraphNode>(to)) { connecting = true; } return; @@ -443,20 +443,20 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { if (E->get().to == gn->get_name() && E->get().to_port == j) { Node *fr = get_node(String(E->get().from)); - if (fr && fr->cast_to<GraphNode>()) { + if (Object::cast_to<GraphNode>(fr)) { connecting_from = E->get().from; connecting_index = E->get().from_port; connecting_out = true; - connecting_type = fr->cast_to<GraphNode>()->get_connection_output_type(E->get().from_port); - connecting_color = fr->cast_to<GraphNode>()->get_connection_output_color(E->get().from_port); + connecting_type = Object::cast_to<GraphNode>(fr)->get_connection_output_type(E->get().from_port); + connecting_color = Object::cast_to<GraphNode>(fr)->get_connection_output_color(E->get().from_port); connecting_target = false; connecting_to = pos; just_disconected = true; emit_signal("disconnection_request", E->get().from, E->get().from_port, E->get().to, E->get().to_port); fr = get_node(String(connecting_from)); //maybe it was erased - if (fr && fr->cast_to<GraphNode>()) { + if (Object::cast_to<GraphNode>(fr)) { connecting = true; } return; @@ -493,7 +493,7 @@ void GraphEdit::_top_layer_input(const Ref<InputEvent> &p_ev) { float grab_r = port->get_width() * 0.5 * grab_r_extend; for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -667,7 +667,7 @@ void GraphEdit::_connections_layer_draw() { continue; } - GraphNode *gfrom = from->cast_to<GraphNode>(); + GraphNode *gfrom = Object::cast_to<GraphNode>(from); if (!gfrom) { to_erase.push_back(E); @@ -681,7 +681,7 @@ void GraphEdit::_connections_layer_draw() { continue; } - GraphNode *gto = to->cast_to<GraphNode>(); + GraphNode *gto = Object::cast_to<GraphNode>(to); if (!gto) { to_erase.push_back(E); @@ -710,7 +710,7 @@ void GraphEdit::_top_layer_draw() { Node *fromn = get_node(connecting_from); ERR_FAIL_COND(!fromn); - GraphNode *from = fromn->cast_to<GraphNode>(); + GraphNode *from = Object::cast_to<GraphNode>(fromn); ERR_FAIL_COND(!from); Vector2 pos; if (connecting_out) @@ -744,7 +744,7 @@ void GraphEdit::set_selected(Node *p_child) { for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -767,7 +767,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { //drag_accum+=Vector2(mm->get_relative().x,mm->get_relative().y); drag_accum = get_local_mouse_pos() - drag_origin; for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (gn && gn->is_selected()) { Vector2 pos = (gn->get_drag_from() * zoom + drag_accum) / zoom; @@ -791,7 +791,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -816,7 +816,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { box_selecting = false; for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; @@ -837,7 +837,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { if (!just_selected && drag_accum == Vector2() && Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { //deselect current node for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (gn) { Rect2 r = gn->get_rect(); @@ -853,7 +853,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { emit_signal("_begin_node_move"); for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (gn && gn->is_selected()) gn->set_drag(false); } @@ -874,7 +874,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn_selected = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn_selected = Object::cast_to<GraphNode>(get_child(i)); if (gn_selected) { if (gn_selected->is_resizing()) @@ -898,7 +898,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { just_selected = !gn->is_selected(); if (!gn->is_selected() && !Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { for (int i = 0; i < get_child_count(); i++) { - GraphNode *o_gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *o_gn = Object::cast_to<GraphNode>(get_child(i)); if (o_gn) o_gn->set_selected(o_gn == gn); } @@ -906,7 +906,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { gn->set_selected(true); for (int i = 0; i < get_child_count(); i++) { - GraphNode *o_gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *o_gn = Object::cast_to<GraphNode>(get_child(i)); if (!o_gn) continue; if (o_gn->is_selected()) @@ -926,7 +926,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { previus_selected.clear(); for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn || !gn->is_selected()) continue; @@ -937,7 +937,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { previus_selected.clear(); for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn || !gn->is_selected()) continue; @@ -948,7 +948,7 @@ void GraphEdit::_gui_input(const Ref<InputEvent> &p_ev) { previus_selected.clear(); for (int i = get_child_count() - 1; i >= 0; i--) { - GraphNode *gn = get_child(i)->cast_to<GraphNode>(); + GraphNode *gn = Object::cast_to<GraphNode>(get_child(i)); if (!gn) continue; diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 4b4ecc5e98..f69b1bf147 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -96,7 +96,7 @@ void GraphNode::_get_property_list(List<PropertyInfo> *p_list) const { int idx = 0; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || c->is_set_as_toplevel()) continue; @@ -122,7 +122,7 @@ void GraphNode::_resort() { Size2 minsize; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -144,7 +144,7 @@ void GraphNode::_resort() { cache_y.clear(); for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -375,7 +375,7 @@ Size2 GraphNode::get_minimum_size() const { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -462,7 +462,7 @@ void GraphNode::_connpos_update() { int idx = 0; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/grid_container.cpp b/scene/gui/grid_container.cpp index 06a58d69b2..1a224d1026 100644 --- a/scene/gui/grid_container.cpp +++ b/scene/gui/grid_container.cpp @@ -51,7 +51,7 @@ void GridContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; @@ -109,7 +109,7 @@ void GridContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; int row = idx / columns; @@ -184,7 +184,7 @@ Size2 GridContainer::get_minimum_size() const { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; int row = idx / columns; diff --git a/scene/gui/margin_container.cpp b/scene/gui/margin_container.cpp index 2bc9db529b..a9f8d9c384 100644 --- a/scene/gui/margin_container.cpp +++ b/scene/gui/margin_container.cpp @@ -40,7 +40,7 @@ Size2 MarginContainer::get_minimum_size() const { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -74,7 +74,7 @@ void MarginContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp index 93284f2b6c..99e78d8851 100644 --- a/scene/gui/menu_button.cpp +++ b/scene/gui/menu_button.cpp @@ -33,7 +33,7 @@ void MenuButton::_unhandled_key_input(Ref<InputEvent> p_event) { - if (p_event->is_pressed() && !p_event->is_echo() && (p_event->cast_to<InputEventKey>() || p_event->cast_to<InputEventJoypadButton>() || p_event->cast_to<InputEventAction>())) { + if (p_event->is_pressed() && !p_event->is_echo() && (Object::cast_to<InputEventKey>(p_event.ptr()) || Object::cast_to<InputEventJoypadButton>(p_event.ptr()) || Object::cast_to<InputEventAction>(*p_event))) { if (!get_parent() || !is_visible_in_tree() || is_disabled()) return; diff --git a/scene/gui/panel_container.cpp b/scene/gui/panel_container.cpp index 86874f7cfd..45bb81ac75 100644 --- a/scene/gui/panel_container.cpp +++ b/scene/gui/panel_container.cpp @@ -41,7 +41,7 @@ Size2 PanelContainer::get_minimum_size() const { Size2 ms; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; if (c->is_set_as_toplevel()) @@ -90,7 +90,7 @@ void PanelContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp index 4725300a5f..348d0aa460 100644 --- a/scene/gui/popup.cpp +++ b/scene/gui/popup.cpp @@ -95,7 +95,7 @@ void Popup::set_as_minsize() { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (!c->is_visible()) @@ -129,7 +129,7 @@ void Popup::popup_centered_minsize(const Size2 &p_minsize) { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (!c->is_visible()) diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 1ba936c4e9..79caf1c836 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -168,7 +168,7 @@ void PopupMenu::_activate_submenu(int over) { Node *n = get_node(items[over].submenu); ERR_EXPLAIN("item subnode does not exist: " + items[over].submenu); ERR_FAIL_COND(!n); - Popup *pm = n->cast_to<Popup>(); + Popup *pm = Object::cast_to<Popup>(n); ERR_EXPLAIN("item subnode is not a Popup: " + items[over].submenu); ERR_FAIL_COND(!pm); if (pm->is_visible_in_tree()) @@ -187,7 +187,7 @@ void PopupMenu::_activate_submenu(int over) { pm->set_position(pos); pm->popup(); - PopupMenu *pum = pm->cast_to<PopupMenu>(); + PopupMenu *pum = Object::cast_to<PopupMenu>(pm); if (pum) { pr.position -= pum->get_global_position(); @@ -869,7 +869,7 @@ bool PopupMenu::activate_item_by_event(const Ref<InputEvent> &p_event, bool p_fo if (!n) continue; - PopupMenu *pm = n->cast_to<PopupMenu>(); + PopupMenu *pm = Object::cast_to<PopupMenu>(n); if (!pm) continue; @@ -891,14 +891,14 @@ void PopupMenu::activate_item(int p_item) { //hide all parent PopupMenue's Node *next = get_parent(); - PopupMenu *pop = next->cast_to<PopupMenu>(); + PopupMenu *pop = Object::cast_to<PopupMenu>(next); while (pop) { // We close all parents that are chained together, // with hide_on_item_selection enabled if ((items[p_item].checkable && hide_on_checkable_item_selection && pop->is_hide_on_checkable_item_selection()) || (!items[p_item].checkable && hide_on_item_selection && pop->is_hide_on_item_selection())) { pop->hide(); next = next->get_parent(); - pop = next->cast_to<PopupMenu>(); + pop = Object::cast_to<PopupMenu>(next); } else { // Break out of loop when the next parent has // hide_on_item_selection disabled diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index 68afe8150a..74e3b39e04 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -170,7 +170,7 @@ double Range::get_as_ratio() const { void Range::_share(Node *p_range) { - Range *r = p_range->cast_to<Range>(); + Range *r = Object::cast_to<Range>(p_range); ERR_FAIL_COND(!r); share(r); } diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp index 4242ee4523..737765aa1a 100644 --- a/scene/gui/scroll_bar.cpp +++ b/scene/gui/scroll_bar.cpp @@ -315,7 +315,7 @@ void ScrollBar::_notification(int p_what) { if (has_node(drag_slave_path)) { Node *n = get_node(drag_slave_path); - drag_slave = n->cast_to<Control>(); + drag_slave = Object::cast_to<Control>(n); } if (drag_slave) { @@ -663,7 +663,7 @@ void ScrollBar::set_drag_slave(const NodePath &p_path) { if (has_node(p_path)) { Node *n = get_node(p_path); - drag_slave = n->cast_to<Control>(); + drag_slave = Object::cast_to<Control>(n); } if (drag_slave) { diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 939bdd8d0c..db94146970 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -40,7 +40,7 @@ Size2 ScrollContainer::get_minimum_size() const { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -220,7 +220,7 @@ void ScrollContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) @@ -423,7 +423,7 @@ String ScrollContainer::get_configuration_warning() const { for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/split_container.cpp b/scene/gui/split_container.cpp index 5fc3db4672..5515c0f0cd 100644 --- a/scene/gui/split_container.cpp +++ b/scene/gui/split_container.cpp @@ -44,7 +44,7 @@ Control *SplitContainer::_getch(int p_idx) const { int idx = 0; for (int i = 0; i < get_child_count(); i++) { - Control *c = get_child(i)->cast_to<Control>(); + Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) continue; if (c->is_set_as_toplevel()) diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index d32b899de7..8afcc896a3 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -230,7 +230,7 @@ void TabContainer::_notification(int p_what) { tab_style->draw(canvas, tab_rect); // Draw the tab contents. - Control *control = tabs[i + first_tab_cache]->cast_to<Control>(); + Control *control = Object::cast_to<Control>(tabs[i + first_tab_cache]); String text = control->has_meta("_tab_name") ? String(tr(String(control->get_meta("_tab_name")))) : String(control->get_name()); int x_content = tab_rect.position.x + tab_style->get_margin(MARGIN_LEFT); @@ -293,7 +293,7 @@ void TabContainer::_notification(int p_what) { } int TabContainer::_get_tab_width(int p_index) const { - Control *control = _get_tabs()[p_index]->cast_to<Control>(); + Control *control = Object::cast_to<Control>(_get_tabs()[p_index]); if (!control || control->is_set_as_toplevel()) return 0; @@ -332,7 +332,7 @@ Vector<Control *> TabContainer::_get_tabs() const { Vector<Control *> controls; for (int i = 0; i < get_child_count(); i++) { - Control *control = get_child(i)->cast_to<Control>(); + Control *control = Object::cast_to<Control>(get_child(i)); if (!control || control->is_toplevel_control()) continue; @@ -350,7 +350,7 @@ void TabContainer::add_child_notify(Node *p_child) { Control::add_child_notify(p_child); - Control *c = p_child->cast_to<Control>(); + Control *c = Object::cast_to<Control>(p_child); if (!c) return; if (c->is_set_as_toplevel()) @@ -616,7 +616,7 @@ Size2 TabContainer::get_minimum_size() const { void TabContainer::set_popup(Node *p_popup) { ERR_FAIL_NULL(p_popup); - popup = p_popup->cast_to<Popup>(); + popup = Object::cast_to<Popup>(p_popup); update(); } diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 49a410f115..a87f6d89e2 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -172,7 +172,9 @@ protected: return d; } - void _remove_child(Object *p_child) { remove_child(p_child->cast_to<TreeItem>()); } + void _remove_child(Object *p_child) { + remove_child(Object::cast_to<TreeItem>(p_child)); + } public: /* cell mode */ @@ -504,9 +506,17 @@ protected: static void _bind_methods(); //bind helpers - Object *_create_item(Object *p_parent) { return create_item(p_parent->cast_to<TreeItem>()); } - TreeItem *_get_next_selected(Object *p_item) { return get_next_selected(p_item->cast_to<TreeItem>()); } - Rect2 _get_item_rect(Object *p_item, int p_column) const { return get_item_rect(p_item->cast_to<TreeItem>(), p_column); } + Object *_create_item(Object *p_parent) { + return create_item(Object::cast_to<TreeItem>(p_parent)); + } + + TreeItem *_get_next_selected(Object *p_item) { + return get_next_selected(Object::cast_to<TreeItem>(p_item)); + } + + Rect2 _get_item_rect(Object *p_item, int p_column) const { + return get_item_rect(Object::cast_to<TreeItem>(p_item), p_column); + } public: virtual String get_tooltip(const Point2 &p_pos) const; diff --git a/scene/gui/viewport_container.cpp b/scene/gui/viewport_container.cpp index dbc2699867..2eb8eaa7d1 100644 --- a/scene/gui/viewport_container.cpp +++ b/scene/gui/viewport_container.cpp @@ -38,7 +38,7 @@ Size2 ViewportContainer::get_minimum_size() const { Size2 ms; for (int i = 0; i < get_child_count(); i++) { - Viewport *c = get_child(i)->cast_to<Viewport>(); + Viewport *c = Object::cast_to<Viewport>(get_child(i)); if (!c) continue; @@ -71,7 +71,7 @@ void ViewportContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Viewport *c = get_child(i)->cast_to<Viewport>(); + Viewport *c = Object::cast_to<Viewport>(get_child(i)); if (!c) continue; @@ -83,7 +83,7 @@ void ViewportContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Viewport *c = get_child(i)->cast_to<Viewport>(); + Viewport *c = Object::cast_to<Viewport>(get_child(i)); if (!c) continue; @@ -98,7 +98,7 @@ void ViewportContainer::_notification(int p_what) { for (int i = 0; i < get_child_count(); i++) { - Viewport *c = get_child(i)->cast_to<Viewport>(); + Viewport *c = Object::cast_to<Viewport>(get_child(i)); if (!c) continue; diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp index 77407fdde7..b168dcfccc 100644 --- a/scene/main/canvas_layer.cpp +++ b/scene/main/canvas_layer.cpp @@ -201,7 +201,7 @@ void CanvasLayer::set_custom_viewport(Node *p_viewport) { viewport = RID(); } - custom_viewport = p_viewport->cast_to<Viewport>(); + custom_viewport = Object::cast_to<Viewport>(p_viewport); if (custom_viewport) { custom_viewport_id = custom_viewport->get_instance_id(); diff --git a/scene/main/node.cpp b/scene/main/node.cpp index c850a5ae74..66d3ad22f1 100755 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -194,7 +194,7 @@ void Node::_propagate_enter_tree() { data.depth = 1; } - data.viewport = cast_to<Viewport>(); + data.viewport = Object::cast_to<Viewport>(this); if (!data.viewport) data.viewport = data.parent->data.viewport; @@ -2160,9 +2160,9 @@ Node *Node::_duplicate(int p_flags) const { bool instanced = false; - if (cast_to<InstancePlaceholder>()) { + if (Object::cast_to<InstancePlaceholder>(this)) { - const InstancePlaceholder *ip = cast_to<const InstancePlaceholder>(); + const InstancePlaceholder *ip = Object::cast_to<const InstancePlaceholder>(this); InstancePlaceholder *nip = memnew(InstancePlaceholder); nip->set_instance_path(ip->get_instance_path()); node = nip; @@ -2180,7 +2180,7 @@ Node *Node::_duplicate(int p_flags) const { Object *obj = ClassDB::instance(get_class()); ERR_FAIL_COND_V(!obj, NULL); - node = obj->cast_to<Node>(); + node = Object::cast_to<Node>(obj); if (!node) memdelete(obj); ERR_FAIL_COND_V(!node, NULL); @@ -2270,7 +2270,7 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p print_line("could not duplicate: " + String(get_class())); } ERR_FAIL_COND(!obj); - node = obj->cast_to<Node>(); + node = Object::cast_to<Node>(obj); if (!node) memdelete(obj); } @@ -2326,7 +2326,7 @@ void Node::_duplicate_signals(const Node *p_original, Node *p_copy) const { NodePath p = p_original->get_path_to(this); Node *copy = p_copy->get_node(p); - Node *target = E->get().target->cast_to<Node>(); + Node *target = Object::cast_to<Node>(E->get().target); if (!target) { continue; } @@ -2355,7 +2355,7 @@ Node *Node::duplicate_and_reown(const Map<Node *, Node *> &p_reown_map) const { print_line("could not duplicate: " + String(get_class())); } ERR_FAIL_COND_V(!obj, NULL); - node = obj->cast_to<Node>(); + node = Object::cast_to<Node>(obj); if (!node) memdelete(obj); ERR_FAIL_COND_V(!node, NULL); @@ -2610,7 +2610,7 @@ void Node::_set_tree(SceneTree *p_tree) { static void _Node_debug_sn(Object *p_obj) { - Node *n = p_obj->cast_to<Node>(); + Node *n = Object::cast_to<Node>(p_obj); if (!n) return; diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 10ab28150b..03a604734e 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -383,7 +383,7 @@ bool SceneTree::is_input_handled() { void SceneTree::input_event(const Ref<InputEvent> &p_event) { - if (Engine::get_singleton()->is_editor_hint() && (p_event->cast_to<InputEventJoypadButton>() || p_event->cast_to<InputEventJoypadMotion>())) + if (Engine::get_singleton()->is_editor_hint() && (Object::cast_to<InputEventJoypadButton>(p_event.ptr()) || Object::cast_to<InputEventJoypadMotion>(*p_event))) return; //avoid joy input on editor root_lock++; @@ -1400,10 +1400,7 @@ void SceneTree::_live_edit_create_node_func(const NodePath &p_parent, const Stri continue; Node *n2 = n->get_node(p_parent); - Object *o = ClassDB::instance(p_type); - if (!o) - continue; - Node *no = o->cast_to<Node>(); + Node *no = Object::cast_to<Node>(ClassDB::instance(p_type)); no->set_name(p_name); n2->add_child(no); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index e0800f4907..0661b10184 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -68,7 +68,7 @@ void ViewportTexture::setup_local_to_scene() { ERR_EXPLAIN("ViewportTexture: Path to node is invalid"); ERR_FAIL_COND(!vpn); - vp = vpn->cast_to<Viewport>(); + vp = Object::cast_to<Viewport>(vpn); ERR_EXPLAIN("ViewportTexture: Path to node does not point to a viewport"); ERR_FAIL_COND(!vp); @@ -337,22 +337,18 @@ void Viewport::_test_new_mouseover(ObjectID new_collider) { if (new_collider != physics_object_over) { if (physics_object_over) { - Object *obj = ObjectDB::get_instance(physics_object_over); - if (obj) { - CollisionObject *co = obj->cast_to<CollisionObject>(); - if (co) { - co->_mouse_exit(); - } + + CollisionObject *co = Object::cast_to<CollisionObject>(ObjectDB::get_instance(physics_object_over)); + if (co) { + co->_mouse_exit(); } } if (new_collider) { - Object *obj = ObjectDB::get_instance(new_collider); - if (obj) { - CollisionObject *co = obj->cast_to<CollisionObject>(); - if (co) { - co->_mouse_enter(); - } + + CollisionObject *co = Object::cast_to<CollisionObject>(ObjectDB::get_instance(new_collider)); + if (co) { + co->_mouse_enter(); } } @@ -552,7 +548,7 @@ void Viewport::_notification(int p_what) { for (int i = 0; i < rc; i++) { if (res[i].collider_id && res[i].collider) { - CollisionObject2D *co = res[i].collider->cast_to<CollisionObject2D>(); + CollisionObject2D *co = Object::cast_to<CollisionObject2D>(res[i].collider); if (co) { Map<ObjectID, uint64_t>::Element *E = physics_2d_mouseover.find(res[i].collider_id); @@ -575,7 +571,7 @@ void Viewport::_notification(int p_what) { Object *o = ObjectDB::get_instance(E->key()); if (o) { - CollisionObject2D *co = o->cast_to<CollisionObject2D>(); + CollisionObject2D *co = Object::cast_to<CollisionObject2D>(o); if (co) { co->_mouse_exit(); } @@ -595,19 +591,14 @@ void Viewport::_notification(int p_what) { if (physics_object_capture != 0) { - Object *obj = ObjectDB::get_instance(physics_object_capture); - if (obj) { - CollisionObject *co = obj->cast_to<CollisionObject>(); - if (co) { - co->_input_event(camera, ev, Vector3(), Vector3(), 0); - captured = true; - if (mb.is_valid() && mb->get_button_index() == 1 && !mb->is_pressed()) { - physics_object_capture = 0; - } - - } else { + CollisionObject *co = Object::cast_to<CollisionObject>(ObjectDB::get_instance(physics_object_capture)); + if (co) { + co->_input_event(camera, ev, Vector3(), Vector3(), 0); + captured = true; + if (mb.is_valid() && mb->get_button_index() == 1 && !mb->is_pressed()) { physics_object_capture = 0; } + } else { physics_object_capture = 0; } @@ -640,18 +631,15 @@ void Viewport::_notification(int p_what) { ObjectID new_collider = 0; if (col) { - if (result.collider) { - - CollisionObject *co = result.collider->cast_to<CollisionObject>(); - if (co) { + CollisionObject *co = Object::cast_to<CollisionObject>(result.collider); + if (co) { - co->_input_event(camera, ev, result.position, result.normal, result.shape); - last_object = co; - last_id = result.collider_id; - new_collider = last_id; - if (co->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { - physics_object_capture = last_id; - } + co->_input_event(camera, ev, result.position, result.normal, result.shape); + last_object = co; + last_id = result.collider_id; + new_collider = last_id; + if (co->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { + physics_object_capture = last_id; } } } @@ -678,11 +666,9 @@ void Viewport::_notification(int p_what) { bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, 0xFFFFFFFF, true); ObjectID new_collider = 0; if (col) { - if (result.collider) { - CollisionObject *co = result.collider->cast_to<CollisionObject>(); - if (co) { - new_collider = result.collider_id; - } + CollisionObject *co = Object::cast_to<CollisionObject>(result.collider); + if (co) { + new_collider = result.collider_id; } } @@ -750,7 +736,7 @@ Size2 Viewport::get_size() const { void Viewport::_update_listener() { /* - if (is_inside_tree() && audio_listener && (camera || listener) && (!get_parent() || (get_parent()->cast_to<Control>() && get_parent()->cast_to<Control>()->is_visible_in_tree()))) { + if (is_inside_tree() && audio_listener && (camera || listener) && (!get_parent() || (Object::cast_to<Control>(get_parent()) && Object::cast_to<Control>(get_parent())->is_visible_in_tree()))) { SpatialSoundServer::get_singleton()->listener_set_space(internal_listener, find_world()->get_sound_space()); } else { SpatialSoundServer::get_singleton()->listener_set_space(internal_listener, RID()); @@ -761,7 +747,7 @@ void Viewport::_update_listener() { void Viewport::_update_listener_2d() { /* - if (is_inside_tree() && audio_listener && (!get_parent() || (get_parent()->cast_to<Control>() && get_parent()->cast_to<Control>()->is_visible_in_tree()))) + if (is_inside_tree() && audio_listener && (!get_parent() || (Object::cast_to<Control>(get_parent()) && Object::cast_to<Control>(get_parent())->is_visible_in_tree()))) SpatialSound2DServer::get_singleton()->listener_set_space(internal_listener_2d, find_world_2d()->get_sound_space()); else SpatialSound2DServer::get_singleton()->listener_set_space(internal_listener_2d, RID()); @@ -1029,11 +1015,11 @@ void Viewport::_propagate_enter_world(Node *p_node) { if (!p_node->is_inside_tree()) //may not have entered scene yet return; - if (p_node->cast_to<Spatial>() || p_node->cast_to<WorldEnvironment>()) { + if (Object::cast_to<Spatial>(p_node) || Object::cast_to<WorldEnvironment>(p_node)) { p_node->notification(Spatial::NOTIFICATION_ENTER_WORLD); } else { - Viewport *v = p_node->cast_to<Viewport>(); + Viewport *v = Object::cast_to<Viewport>(p_node); if (v) { if (v->world.is_valid()) @@ -1053,7 +1039,7 @@ void Viewport::_propagate_viewport_notification(Node *p_node, int p_what) { p_node->notification(p_what); for (int i = 0; i < p_node->get_child_count(); i++) { Node *c = p_node->get_child(i); - if (c->cast_to<Viewport>()) + if (Object::cast_to<Viewport>(c)) continue; _propagate_viewport_notification(c, p_what); } @@ -1066,11 +1052,11 @@ void Viewport::_propagate_exit_world(Node *p_node) { if (!p_node->is_inside_tree()) //may have exited scene already return; - if (p_node->cast_to<Spatial>() || p_node->cast_to<WorldEnvironment>()) { + if (Object::cast_to<Spatial>(p_node) || Object::cast_to<WorldEnvironment>(p_node)) { p_node->notification(Spatial::NOTIFICATION_EXIT_WORLD); } else { - Viewport *v = p_node->cast_to<Viewport>(); + Viewport *v = Object::cast_to<Viewport>(p_node); if (v) { if (v->world.is_valid()) @@ -1514,12 +1500,12 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu mb->get_button_index() == BUTTON_WHEEL_LEFT || mb->get_button_index() == BUTTON_WHEEL_RIGHT)); - bool ismouse = ev.is_valid() || p_input->cast_to<InputEventMouseMotion>() != NULL; + bool ismouse = ev.is_valid() || Object::cast_to<InputEventMouseMotion>(*p_input) != NULL; CanvasItem *ci = p_control; while (ci) { - Control *control = ci->cast_to<Control>(); + Control *control = Object::cast_to<Control>(ci); if (control) { control->call_multilevel(SceneStringNames::get_singleton()->_gui_input, ev); if (gui.key_event_accepted) @@ -1592,10 +1578,10 @@ Control *Viewport::_gui_find_control(const Point2 &p_global) { Control *Viewport::_gui_find_control_at_pos(CanvasItem *p_node, const Point2 &p_global, const Transform2D &p_xform, Transform2D &r_inv_xform) { - if (p_node->cast_to<Viewport>()) + if (Object::cast_to<Viewport>(p_node)) return NULL; - Control *c = p_node->cast_to<Control>(); + Control *c = Object::cast_to<Control>(p_node); if (c) { //print_line("at "+String(c->get_path())+" POS "+c->get_position()+" bt "+p_xform); @@ -1620,7 +1606,7 @@ Control *Viewport::_gui_find_control_at_pos(CanvasItem *p_node, const Point2 &p_ if (p_node == gui.tooltip_popup) continue; - CanvasItem *ci = p_node->get_child(i)->cast_to<CanvasItem>(); + CanvasItem *ci = Object::cast_to<CanvasItem>(p_node->get_child(i)); if (!ci || ci->is_set_as_toplevel()) continue; @@ -1649,7 +1635,7 @@ bool Viewport::_gui_drop(Control *p_at_control, Point2 p_at_pos, bool p_just_che CanvasItem *ci = p_at_control; while (ci) { - Control *control = ci->cast_to<Control>(); + Control *control = Object::cast_to<Control>(ci); if (control) { if (control->can_drop_data(p_at_pos, gui.drag_data)) { @@ -1774,7 +1760,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { CanvasItem *ci = gui.mouse_focus; while (ci) { - Control *control = ci->cast_to<Control>(); + Control *control = Object::cast_to<Control>(ci); if (control) { if (control->get_focus_mode() != Control::FOCUS_NONE) { if (control != gui.key_focus) { @@ -1895,7 +1881,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { CanvasItem *ci = gui.mouse_focus; while (ci) { - Control *control = ci->cast_to<Control>(); + Control *control = Object::cast_to<Control>(ci); if (control) { gui.drag_data = control->get_drag_data(control->get_global_transform_with_canvas().affine_inverse().xform(mpos) - gui.drag_accum); @@ -2240,7 +2226,7 @@ void Viewport::_gui_remove_from_modal_stack(List<Control *>::Element *MI, Object if (!next) { //top of stack Object *pfo = ObjectDB::get_instance(p_prev_focus_owner); - Control *pfoc = pfo->cast_to<Control>(); + Control *pfoc = Object::cast_to<Control>(pfo); if (!pfoc) return; @@ -2270,7 +2256,7 @@ void Viewport::_gui_force_drag(Control *p_base, const Variant &p_data, Control * void Viewport::_gui_set_drag_preview(Control *p_base, Control *p_control) { ERR_FAIL_NULL(p_control); - ERR_FAIL_COND(!((Object *)p_control)->cast_to<Control>()); + ERR_FAIL_COND(!Object::cast_to<Control>((Object *)p_control)); ERR_FAIL_COND(p_control->is_inside_tree()); ERR_FAIL_COND(p_control->get_parent() != NULL); @@ -2445,14 +2431,18 @@ void Viewport::unhandled_input(const Ref<InputEvent> &p_event) { get_tree()->_call_input_pause(unhandled_input_group, "_unhandled_input", p_event); //call_group(GROUP_CALL_REVERSE|GROUP_CALL_REALTIME|GROUP_CALL_MULIILEVEL,"unhandled_input","_unhandled_input",ev); - if (!get_tree()->input_handled && p_event->cast_to<InputEventKey>() != NULL) { + if (!get_tree()->input_handled && Object::cast_to<InputEventKey>(*p_event) != NULL) { get_tree()->_call_input_pause(unhandled_key_input_group, "_unhandled_key_input", p_event); //call_group(GROUP_CALL_REVERSE|GROUP_CALL_REALTIME|GROUP_CALL_MULIILEVEL,"unhandled_key_input","_unhandled_key_input",ev); } if (physics_object_picking && !get_tree()->input_handled) { - if (Input::get_singleton()->get_mouse_mode() != Input::MOUSE_MODE_CAPTURED && (p_event->cast_to<InputEventMouseButton>() || p_event->cast_to<InputEventMouseMotion>() || p_event->cast_to<InputEventScreenDrag>() || p_event->cast_to<InputEventScreenTouch>())) { + if (Input::get_singleton()->get_mouse_mode() != Input::MOUSE_MODE_CAPTURED && + (Object::cast_to<InputEventMouseButton>(*p_event) || + Object::cast_to<InputEventMouseMotion>(*p_event) || + Object::cast_to<InputEventScreenDrag>(*p_event) || + Object::cast_to<InputEventScreenTouch>(*p_event))) { physics_picking_events.push_back(p_event); } } @@ -2567,7 +2557,7 @@ Control *Viewport::get_modal_stack_top() const { String Viewport::get_configuration_warning() const { - /*if (get_parent() && !get_parent()->cast_to<Control>() && !render_target) { + /*if (get_parent() && !Object::cast_to<Control>(get_parent()) && !render_target) { return TTR("This viewport is not set as render target. If you intend for it to display its contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign its internal texture to some node for display."); }*/ diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index d7ea675a47..3ce44e2c31 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -151,18 +151,18 @@ Node *SceneState::instance(GenEditState p_edit_state) const { //print_line("created"); //node belongs to this scene and must be created Object *obj = ClassDB::instance(snames[n.type]); - if (!obj || !obj->cast_to<Node>()) { + if (!Object::cast_to<Node>(obj)) { if (obj) { memdelete(obj); obj = NULL; } WARN_PRINT(String("Warning node of type " + snames[n.type].operator String() + " does not exist.").ascii().get_data()); if (n.parent >= 0 && n.parent < nc && ret_nodes[n.parent]) { - if (ret_nodes[n.parent]->cast_to<Spatial>()) { + if (Object::cast_to<Spatial>(ret_nodes[n.parent])) { obj = memnew(Spatial); - } else if (ret_nodes[n.parent]->cast_to<Control>()) { + } else if (Object::cast_to<Control>(ret_nodes[n.parent])) { obj = memnew(Control); - } else if (ret_nodes[n.parent]->cast_to<Node2D>()) { + } else if (Object::cast_to<Node2D>(ret_nodes[n.parent])) { obj = memnew(Node2D); } } @@ -172,7 +172,7 @@ Node *SceneState::instance(GenEditState p_edit_state) const { } } - node = obj->cast_to<Node>(); + node = Object::cast_to<Node>(obj); } else { print_line("wtf class is disabled for: " + itos(n.type)); @@ -754,7 +754,7 @@ Error SceneState::_parse_connections(Node *p_owner, Node *p_node, Map<StringName // only connections that originate or end into main saved scene are saved // everything else is discarded - Node *target = c.target->cast_to<Node>(); + Node *target = Object::cast_to<Node>(c.target); if (!target) { continue; diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp index 49cd030a9a..0cccdc4fbf 100644 --- a/scene/resources/scene_format_text.cpp +++ b/scene/resources/scene_format_text.cpp @@ -239,7 +239,7 @@ Error ResourceInteractiveLoaderText::poll() { return error; } - Resource *r = obj->cast_to<Resource>(); + Resource *r = Object::cast_to<Resource>(obj); if (!r) { error_text += "Can't create sub resource of type, because not a resource: " + type; @@ -305,7 +305,7 @@ Error ResourceInteractiveLoaderText::poll() { return error; } - Resource *r = obj->cast_to<Resource>(); + Resource *r = Object::cast_to<Resource>(obj); if (!r) { error_text += "Can't create sub resource of type, because not a resource: " + res_type; diff --git a/scene/resources/shape.cpp b/scene/resources/shape.cpp index 6be88374e5..d719aa5403 100644 --- a/scene/resources/shape.cpp +++ b/scene/resources/shape.cpp @@ -74,7 +74,7 @@ Ref<ArrayMesh> Shape::get_debug_mesh() { arr.resize(Mesh::ARRAY_MAX); arr[Mesh::ARRAY_VERTEX] = array; - SceneTree *st = OS::get_singleton()->get_main_loop()->cast_to<SceneTree>(); + SceneTree *st = Object::cast_to<SceneTree>(OS::get_singleton()->get_main_loop()); debug_mesh_cache->add_surface_from_arrays(Mesh::PRIMITIVE_LINES, arr); diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp index ac1bb105ac..c2c7c37762 100644 --- a/scene/resources/theme.cpp +++ b/scene/resources/theme.cpp @@ -1030,14 +1030,13 @@ RES ResourceFormatLoaderTheme::load(const String &p_path, const String &p_origin ERR_FAIL_V(RES()); } - if (res->cast_to<StyleBox>()) { - + if (Object::cast_to<StyleBox>(*res)) { theme->set_stylebox(item, control, res); - } else if (res->cast_to<Font>()) { + } else if (Object::cast_to<Font>(*res)) { theme->set_font(item, control, res); - } else if (res->cast_to<Font>()) { + } else if (Object::cast_to<Font>(*res)) { theme->set_font(item, control, res); - } else if (res->cast_to<Texture>()) { + } else if (Object::cast_to<Texture>(*res)) { theme->set_icon(item, control, res); } else { memdelete(f); |