diff options
Diffstat (limited to 'scene')
379 files changed, 1830 insertions, 6394 deletions
diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp index 366c3a8bd8..26241df660 100644 --- a/scene/2d/animated_sprite.cpp +++ b/scene/2d/animated_sprite.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/animated_sprite.h b/scene/2d/animated_sprite.h index 80defac079..6c660d0381 100644 --- a/scene/2d/animated_sprite.h +++ b/scene/2d/animated_sprite.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp index 02a0509449..1124904963 100644 --- a/scene/2d/area_2d.cpp +++ b/scene/2d/area_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/area_2d.h b/scene/2d/area_2d.h index 12d71f3911..c56cf651a1 100644 --- a/scene/2d/area_2d.h +++ b/scene/2d/area_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp index 73782e1515..ea2e77fc47 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; @@ -219,13 +217,16 @@ void AudioStreamPlayer2D::_notification(int p_what) { setseek = setplay; active = true; setplay = -1; - _change_notify("playing"); //update property in editor + //do not update, this makes it easier to animate (will shut off otherise) + //_change_notify("playing"); //update property in editor } //stop playing if no longer active if (!active) { set_fixed_process_internal(false); - _change_notify("playing"); //update property in editor + //do not update, this makes it easier to animate (will shut off otherise) + //_change_notify("playing"); //update property in editor + emit_signal("finished"); } } } @@ -247,12 +248,14 @@ void AudioStreamPlayer2D::set_stream(Ref<AudioStream> p_stream) { stream = p_stream; stream_playback = p_stream->instance_playback(); + AudioServer::get_singleton()->unlock(); + if (stream_playback.is_null()) { stream.unref(); ERR_FAIL_COND(stream_playback.is_null()); } - AudioServer::get_singleton()->unlock(); + } Ref<AudioStream> AudioStreamPlayer2D::get_stream() const { @@ -438,12 +441,15 @@ void AudioStreamPlayer2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "volume_db", PROPERTY_HINT_RANGE, "-80,24"), "set_volume_db", "get_volume_db"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_playing", "_is_active"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "play", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_playing", "_is_active"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "is_autoplay_enabled"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "max_distance", PROPERTY_HINT_RANGE, "1,65536,1"), "set_max_distance", "get_max_distance"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "attenuation", PROPERTY_HINT_EXP_EASING), "set_attenuation", "get_attenuation"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask"); + + ADD_SIGNAL(MethodInfo("finished")); + } AudioStreamPlayer2D::AudioStreamPlayer2D() { diff --git a/scene/2d/back_buffer_copy.cpp b/scene/2d/back_buffer_copy.cpp index 44bee20d0a..2858ddaad5 100644 --- a/scene/2d/back_buffer_copy.cpp +++ b/scene/2d/back_buffer_copy.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/back_buffer_copy.h b/scene/2d/back_buffer_copy.h index 4080f50696..2424dd7b19 100644 --- a/scene/2d/back_buffer_copy.h +++ b/scene/2d/back_buffer_copy.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index f309631715..e39e6fc6da 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/camera_2d.h b/scene/2d/camera_2d.h index 8d9e76be85..dfcadf65a6 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 5a519dee69..a7c5d1adbb 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -37,6 +37,7 @@ #include "scene/resources/style_box.h" #include "scene/resources/texture.h" #include "scene/scene_string_names.h" +#include "servers/visual/visual_server_raster.h" #include "servers/visual_server.h" Mutex *CanvasItemMaterial::material_mutex = NULL; @@ -260,7 +261,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 +399,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 +407,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 +461,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 +489,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 +566,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 +827,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 +1059,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 +1119,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/canvas_item.h b/scene/2d/canvas_item.h index c6180e07b6..5a0a9c6e6a 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -291,10 +291,10 @@ public: RID get_canvas() const; Ref<World2D> get_world_2d() const; - void set_material(const Ref<Material> &p_material); + virtual void set_material(const Ref<Material> &p_material); Ref<Material> get_material() const; - void set_use_parent_material(bool p_use_parent_material); + virtual void set_use_parent_material(bool p_use_parent_material); bool get_use_parent_material() const; Ref<InputEvent> make_input_local(const Ref<InputEvent> &p_event) const; diff --git a/scene/2d/canvas_modulate.cpp b/scene/2d/canvas_modulate.cpp index a132c5e18c..05831609fc 100644 --- a/scene/2d/canvas_modulate.cpp +++ b/scene/2d/canvas_modulate.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/canvas_modulate.h b/scene/2d/canvas_modulate.h index 37d9d47ba5..4195c1386c 100644 --- a/scene/2d/canvas_modulate.h +++ b/scene/2d/canvas_modulate.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/collision_object_2d.cpp b/scene/2d/collision_object_2d.cpp index d3bb5a8d4e..ce56b85a9e 100644 --- a/scene/2d/collision_object_2d.cpp +++ b/scene/2d/collision_object_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/collision_object_2d.h b/scene/2d/collision_object_2d.h index 36bf39ff4e..a828d8d8ea 100644 --- a/scene/2d/collision_object_2d.h +++ b/scene/2d/collision_object_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/collision_polygon_2d.cpp b/scene/2d/collision_polygon_2d.cpp index 433661e393..e2764a6e8d 100644 --- a/scene/2d/collision_polygon_2d.cpp +++ b/scene/2d/collision_polygon_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -79,11 +79,6 @@ void CollisionPolygon2D::_build_polygon() { Vector<Vector<Vector2> > CollisionPolygon2D::_decompose_in_convex() { Vector<Vector<Vector2> > decomp; -#if 0 - //fast but imprecise triangulator, gave us problems - decomp = Geometry::decompose_polygon(polygon); -#else - List<TriangulatorPoly> in_poly, out_poly; TriangulatorPoly inp; @@ -116,8 +111,6 @@ Vector<Vector<Vector2> > CollisionPolygon2D::_decompose_in_convex() { idx++; } -#endif - return decomp; } @@ -126,7 +119,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 +250,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_polygon_2d.h b/scene/2d/collision_polygon_2d.h index f0666ba9de..c9ec860e36 100644 --- a/scene/2d/collision_polygon_2d.h +++ b/scene/2d/collision_polygon_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/collision_shape_2d.cpp b/scene/2d/collision_shape_2d.cpp index 3fda4ab464..0758f4a9bf 100644 --- a/scene/2d/collision_shape_2d.cpp +++ b/scene/2d/collision_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/collision_shape_2d.h b/scene/2d/collision_shape_2d.h index 1f2b96b91f..04203a75b4 100644 --- a/scene/2d/collision_shape_2d.h +++ b/scene/2d/collision_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/joints_2d.cpp b/scene/2d/joints_2d.cpp index ee41dca3a6..69bad1623f 100644 --- a/scene/2d/joints_2d.cpp +++ b/scene/2d/joints_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/joints_2d.h b/scene/2d/joints_2d.h index f854ce51ee..685299abc6 100644 --- a/scene/2d/joints_2d.h +++ b/scene/2d/joints_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/light_2d.cpp b/scene/2d/light_2d.cpp index 219574cbfd..1bca2c6f37 100644 --- a/scene/2d/light_2d.cpp +++ b/scene/2d/light_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -434,8 +434,8 @@ void Light2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shadow_enabled"), "set_shadow_enabled", "is_shadow_enabled"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "shadow_color"), "set_shadow_color", "get_shadow_color"); ADD_PROPERTY(PropertyInfo(Variant::INT, "shadow_buffer_size", PROPERTY_HINT_RANGE, "32,16384,1"), "set_shadow_buffer_size", "get_shadow_buffer_size"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "shadow_gradient_length", PROPERTY_HINT_RANGE, "1,4096,0.1"), "set_shadow_gradient_length", "get_shadow_gradient_length"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "shadow_filter", PROPERTY_HINT_ENUM, "None,PCF3,PCF5,PCF9,PCF13"), "set_shadow_filter", "get_shadow_filter"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "shadow_gradient_length", PROPERTY_HINT_RANGE, "0,4096,0.1"), "set_shadow_gradient_length", "get_shadow_gradient_length"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "shadow_filter", PROPERTY_HINT_ENUM, "None,PCF3,PCF5,PCF7,PCF9,PCF13"), "set_shadow_filter", "get_shadow_filter"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "shadow_filter_smooth", PROPERTY_HINT_RANGE, "0,64,0.1"), "set_shadow_smooth", "get_shadow_smooth"); ADD_PROPERTY(PropertyInfo(Variant::INT, "shadow_item_cull_mask", PROPERTY_HINT_LAYERS_2D_RENDER), "set_item_shadow_cull_mask", "get_item_shadow_cull_mask"); diff --git a/scene/2d/light_2d.h b/scene/2d/light_2d.h index 90e55aeda4..f6bc943adb 100644 --- a/scene/2d/light_2d.h +++ b/scene/2d/light_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -48,6 +48,7 @@ public: SHADOW_FILTER_NONE, SHADOW_FILTER_PCF3, SHADOW_FILTER_PCF5, + SHADOW_FILTER_PCF7, SHADOW_FILTER_PCF9, SHADOW_FILTER_PCF13, }; diff --git a/scene/2d/light_occluder_2d.cpp b/scene/2d/light_occluder_2d.cpp index 680adeea69..92e0d8a2f6 100644 --- a/scene/2d/light_occluder_2d.cpp +++ b/scene/2d/light_occluder_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/light_occluder_2d.h b/scene/2d/light_occluder_2d.h index 30c30b1a47..cca7bfecd6 100644 --- a/scene/2d/light_occluder_2d.h +++ b/scene/2d/light_occluder_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/line_2d.cpp b/scene/2d/line_2d.cpp index 6e7bfe63c8..c87a9a5b1e 100644 --- a/scene/2d/line_2d.cpp +++ b/scene/2d/line_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/line_2d.h b/scene/2d/line_2d.h index e8ca5e6e7c..017ccf13ff 100644 --- a/scene/2d/line_2d.h +++ b/scene/2d/line_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/line_builder.cpp b/scene/2d/line_builder.cpp index 3c1410edbb..1235013af4 100644 --- a/scene/2d/line_builder.cpp +++ b/scene/2d/line_builder.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -139,7 +139,7 @@ void LineBuilder::build() { float current_distance0 = 0.f; float current_distance1 = 0.f; - float total_distance; + float total_distance = 0.f; _interpolate_color = gradient != NULL; bool distance_required = _interpolate_color || texture_mode == LINE_TEXTURE_TILE; if (distance_required) diff --git a/scene/2d/line_builder.h b/scene/2d/line_builder.h index 0e1a2aaf50..227e0abd08 100644 --- a/scene/2d/line_builder.h +++ b/scene/2d/line_builder.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/navigation2d.cpp b/scene/2d/navigation2d.cpp index 383236b4ca..74d835dfb2 100644 --- a/scene/2d/navigation2d.cpp +++ b/scene/2d/navigation2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -236,42 +236,6 @@ void Navigation2D::navpoly_remove(int p_id) { _navpoly_unlink(p_id); navpoly_map.erase(p_id); } -#if 0 -void Navigation2D::_clip_path(Vector<Vector2>& path, Polygon *from_poly, const Vector2& p_to_point, Polygon* p_to_poly) { - - Vector2 from = path[path.size()-1]; - - if (from.distance_to(p_to_point)<CMP_EPSILON) - return; - Plane cut_plane; - cut_plane.normal = (from-p_to_point).cross(up); - if (cut_plane.normal==Vector2()) - return; - cut_plane.normal.normalize(); - cut_plane.d = cut_plane.normal.dot(from); - - - while(from_poly!=p_to_poly) { - - int pe = from_poly->prev_edge; - Vector2 a = _get_vertex(from_poly->edges[pe].point); - Vector2 b = _get_vertex(from_poly->edges[(pe+1)%from_poly->edges.size()].point); - - from_poly=from_poly->edges[pe].C; - ERR_FAIL_COND(!from_poly); - - if (a.distance_to(b)>CMP_EPSILON) { - - Vector2 inters; - if (cut_plane.intersects_segment(a,b,&inters)) { - if (inters.distance_to(p_to_point)>CMP_EPSILON && inters.distance_to(path[path.size()-1])>CMP_EPSILON) { - path.push_back(inters); - } - } - } - } -} -#endif Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vector2 &p_end, bool p_optimize) { @@ -498,29 +462,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect open_list.erase(least_cost_poly); } -#if 0 -debug path - { - Polygon *p=end_poly; - int idx=0; - - while(true) { - int prev = p->prev_edge; - int prev_n = (p->prev_edge+1)%p->edges.size(); - Vector2 point = (_get_vertex(p->edges[prev].point) + _get_vertex(p->edges[prev_n].point))*0.5; - String points; - for(int i=0;i<p->edges.size();i++) { - if (i>0) - points+=", "; - points+=_get_vertex(p->edges[i].point); - } - //print_line("poly "+itos(idx++)+" - "+points); - p = p->edges[prev].C; - if (p==begin_poly) - break; - } - } -#endif + if (found_route) { Vector<Vector2> path; @@ -534,7 +476,6 @@ debug path Polygon *left_poly = end_poly; Polygon *right_poly = end_poly; Polygon *p = end_poly; - path.push_back(end_point); while (p) { @@ -592,7 +533,7 @@ debug path left_poly = p; portal_left = apex_point; portal_right = apex_point; - if (path[path.size() - 1].distance_to(apex_point) > CMP_EPSILON) + if (!path.size() || path[path.size() - 1].distance_to(apex_point) > CMP_EPSILON) path.push_back(apex_point); skip = true; //print_line("addpoint left"); @@ -613,7 +554,7 @@ debug path right_poly = p; portal_right = apex_point; portal_left = apex_point; - if (path[path.size() - 1].distance_to(apex_point) > CMP_EPSILON) + if (!path.size() || path[path.size() - 1].distance_to(apex_point) > CMP_EPSILON) path.push_back(apex_point); //print_line("addpoint right"); //print_line("***CLIP RIGHT"); @@ -626,16 +567,10 @@ debug path p = NULL; } - if (path[path.size() - 1].distance_to(begin_point) > CMP_EPSILON) - path.push_back(begin_point); - - path.invert(); - } else { //midpoints Polygon *p = end_poly; - path.push_back(end_point); while (true) { int prev = p->prev_edge; int prev_n = (p->prev_edge + 1) % p->edges.size(); @@ -645,11 +580,20 @@ debug path if (p == begin_poly) break; } + } + + if (!path.size() || path[path.size() - 1].distance_squared_to(begin_point) > CMP_EPSILON) { + path.push_back(begin_point); // Add the begin point + } else { + path[path.size() - 1] = begin_point; // Replace first midpoint by the exact begin point + } - if (path[path.size() - 1].distance_to(begin_point) > CMP_EPSILON) - path.push_back(begin_point); + path.invert(); - path.invert(); + if (path.size() <= 1 || path[path.size() - 1].distance_squared_to(end_point) > CMP_EPSILON) { + path.push_back(end_point); // Add the end point + } else { + path[path.size() - 1] = end_point; // Replace last midpoint by the exact end point } return path; diff --git a/scene/2d/navigation2d.h b/scene/2d/navigation2d.h index 54e89de9e2..e87b01f7c5 100644 --- a/scene/2d/navigation2d.h +++ b/scene/2d/navigation2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -153,9 +153,7 @@ class Navigation2D : public Node2D { float cell_size; Map<int, NavMesh> navpoly_map; int last_id; -#if 0 - void _clip_path(Vector<Vector2>& path,Polygon *from_poly, const Vector2& p_to_point, Polygon* p_to_poly); -#endif + protected: static void _bind_methods(); diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp index 7515d486c2..352ec3b300 100644 --- a/scene/2d/navigation_polygon.cpp +++ b/scene/2d/navigation_polygon.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/navigation_polygon.h b/scene/2d/navigation_polygon.h index f6e6ed210a..5576a3abd2 100644 --- a/scene/2d/navigation_polygon.h +++ b/scene/2d/navigation_polygon.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 98d6a467b1..0c7685a858 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/node_2d.h b/scene/2d/node_2d.h index a6009851c7..19aafc81ff 100644 --- a/scene/2d/node_2d.h +++ b/scene/2d/node_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/parallax_background.cpp b/scene/2d/parallax_background.cpp index 433ab5ff8d..0ddcb7b51b 100644 --- a/scene/2d/parallax_background.cpp +++ b/scene/2d/parallax_background.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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_background.h b/scene/2d/parallax_background.h index fce1bbd928..0dad1daeab 100644 --- a/scene/2d/parallax_background.h +++ b/scene/2d/parallax_background.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/parallax_layer.cpp b/scene/2d/parallax_layer.cpp index debdc22b65..8fe651cb5f 100644 --- a/scene/2d/parallax_layer.cpp +++ b/scene/2d/parallax_layer.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/parallax_layer.h b/scene/2d/parallax_layer.h index f2d0053342..95ca27c41a 100644 --- a/scene/2d/parallax_layer.h +++ b/scene/2d/parallax_layer.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/particles_2d.cpp b/scene/2d/particles_2d.cpp index b0c00c4a64..c146ac08c2 100644 --- a/scene/2d/particles_2d.cpp +++ b/scene/2d/particles_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/particles_2d.h b/scene/2d/particles_2d.h index a6ac0c37d3..6946f2a799 100644 --- a/scene/2d/particles_2d.h +++ b/scene/2d/particles_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp index a79f60c96f..1d7bd8fc2a 100644 --- a/scene/2d/path_2d.cpp +++ b/scene/2d/path_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/path_2d.h b/scene/2d/path_2d.h index e80817cd3c..88a0abdea9 100644 --- a/scene/2d/path_2d.h +++ b/scene/2d/path_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/path_texture.cpp b/scene/2d/path_texture.cpp index e06c79dabd..13644f71cf 100644 --- a/scene/2d/path_texture.cpp +++ b/scene/2d/path_texture.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/path_texture.h b/scene/2d/path_texture.h index 163e914e4a..4639a6072b 100644 --- a/scene/2d/path_texture.h +++ b/scene/2d/path_texture.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index aaba9da299..b1eb2ba267 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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"); } @@ -182,29 +182,6 @@ real_t StaticBody2D::get_constant_angular_velocity() const { return constant_angular_velocity; } -#if 0 -void StaticBody2D::_update_xform() { - - if (!pre_xform || !pending) - return; - - setting=true; - - - Transform2D new_xform = get_global_transform(); //obtain the new one - - set_block_transform_notify(true); - Physics2DServer::get_singleton()->body_set_state(get_rid(),Physics2DServer::BODY_STATE_TRANSFORM,*pre_xform); //then simulate motion! - set_global_transform(*pre_xform); //but restore state to previous one in both visual and physics - set_block_transform_notify(false); - - Physics2DServer::get_singleton()->body_static_simulate_motion(get_rid(),new_xform); //then simulate motion! - - setting=false; - pending=false; - -} -#endif void StaticBody2D::set_friction(real_t p_friction) { @@ -262,7 +239,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 +262,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 +287,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 +370,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 @@ -906,7 +883,7 @@ void RigidBody2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_colliding_bodies"), &RigidBody2D::get_colliding_bodies); - BIND_VMETHOD(MethodInfo("_integrate_forces", PropertyInfo(Variant::OBJECT, "state:Physics2DDirectBodyState"))); + BIND_VMETHOD(MethodInfo("_integrate_forces", PropertyInfo(Variant::OBJECT, "state", PROPERTY_HINT_RESOURCE_TYPE, "Physics2DDirectBodyState"))); ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Rigid,Static,Character,Kinematic"), "set_mode", "get_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "mass", PROPERTY_HINT_EXP_RANGE, "0.01,65535,0.01"), "set_mass", "get_mass"); @@ -1171,12 +1148,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/physics_body_2d.h b/scene/2d/physics_body_2d.h index 54bd263b15..1a4b0c0f5c 100644 --- a/scene/2d/physics_body_2d.h +++ b/scene/2d/physics_body_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp index cde5724069..197c74352e 100644 --- a/scene/2d/polygon_2d.cpp +++ b/scene/2d/polygon_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/polygon_2d.h b/scene/2d/polygon_2d.h index eb47f4d8d1..20c3324a50 100644 --- a/scene/2d/polygon_2d.h +++ b/scene/2d/polygon_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/position_2d.cpp b/scene/2d/position_2d.cpp index 7688faa23b..cde665d422 100644 --- a/scene/2d/position_2d.cpp +++ b/scene/2d/position_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/position_2d.h b/scene/2d/position_2d.h index 67ff2c610d..af54fb919a 100644 --- a/scene/2d/position_2d.h +++ b/scene/2d/position_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp index fbec922a2d..f90331c411 100644 --- a/scene/2d/ray_cast_2d.cpp +++ b/scene/2d/ray_cast_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/ray_cast_2d.h b/scene/2d/ray_cast_2d.h index 244f4302ad..338de814d2 100644 --- a/scene/2d/ray_cast_2d.h +++ b/scene/2d/ray_cast_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/remote_transform_2d.cpp b/scene/2d/remote_transform_2d.cpp index cbd7ac06f5..c139573853 100644 --- a/scene/2d/remote_transform_2d.cpp +++ b/scene/2d/remote_transform_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/remote_transform_2d.h b/scene/2d/remote_transform_2d.h index d58ec14a95..30d5fd1e7c 100644 --- a/scene/2d/remote_transform_2d.h +++ b/scene/2d/remote_transform_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/screen_button.cpp b/scene/2d/screen_button.cpp index e8e5e9411f..c9bf6675d2 100644 --- a/scene/2d/screen_button.cpp +++ b/scene/2d/screen_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/screen_button.h b/scene/2d/screen_button.h index 2a5935aaf1..7647070b26 100644 --- a/scene/2d/screen_button.h +++ b/scene/2d/screen_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index 2ec529a166..c53faab5f9 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/sprite.h b/scene/2d/sprite.h index d3f9a5f032..64d30325f2 100644 --- a/scene/2d/sprite.h +++ b/scene/2d/sprite.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 5d246e331f..b1cc8c226a 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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; @@ -336,6 +336,7 @@ void TileMap::_update_dirty_quadrants() { if (mat.is_valid()) vs->canvas_item_set_material(canvas_item, mat->get_rid()); vs->canvas_item_set_parent(canvas_item, get_canvas_item()); + _update_item_material_state(canvas_item); Transform2D xform; xform.set_origin(q.pos); vs->canvas_item_set_transform(canvas_item, xform); @@ -370,15 +371,13 @@ void TileMap::_update_dirty_quadrants() { s = tex->get_size(); else { s = r.size; - r.position.x += fp_adjust; - r.position.y += fp_adjust; - r.size.x -= fp_adjust * 2.0; - r.size.y -= fp_adjust * 2.0; } Rect2 rect; rect.position = offset.floor(); rect.size = s; + rect.size.x += fp_adjust; + rect.size.y += fp_adjust; if (rect.size.y > rect.size.x) { if ((c.flip_h && (c.flip_v || c.transpose)) || (c.flip_v && !c.transpose)) @@ -782,6 +781,35 @@ void TileMap::_clear_quadrants() { } } +void TileMap::set_material(const Ref<Material> &p_material) { + + CanvasItem::set_material(p_material); + _update_all_items_material_state(); +} + +void TileMap::set_use_parent_material(bool p_use_parent_material) { + + CanvasItem::set_use_parent_material(p_use_parent_material); + _update_all_items_material_state(); +} + +void TileMap::_update_all_items_material_state() { + + for (Map<PosKey, Quadrant>::Element *E = quadrant_map.front(); E; E = E->next()) { + + Quadrant &q = E->get(); + for (List<RID>::Element *E = q.canvas_items.front(); E; E = E->next()) { + + _update_item_material_state(E->get()); + } + } +} + +void TileMap::_update_item_material_state(const RID &p_canvas_item) { + + VS::get_singleton()->canvas_item_set_use_parent_material(p_canvas_item, get_use_parent_material() || get_material().is_valid()); +} + void TileMap::clear() { _clear_quadrants(); diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index 082e9d1018..c9d14e09d1 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -183,6 +183,9 @@ private: void _update_quadrant_transform(); void _recompute_rect_cache(); + void _update_all_items_material_state(); + _FORCE_INLINE_ void _update_item_material_state(const RID &p_canvas_item); + _FORCE_INLINE_ int _get_quadrant_size() const; void _set_tile_data(const PoolVector<int> &p_data); @@ -278,6 +281,10 @@ public: virtual void set_light_mask(int p_light_mask); + virtual void set_material(const Ref<Material> &p_material); + + virtual void set_use_parent_material(bool p_use_parent_material); + void clear(); TileMap(); diff --git a/scene/2d/visibility_notifier_2d.cpp b/scene/2d/visibility_notifier_2d.cpp index 2f2ad08f01..8fc8b65217 100644 --- a/scene/2d/visibility_notifier_2d.cpp +++ b/scene/2d/visibility_notifier_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/2d/visibility_notifier_2d.h b/scene/2d/visibility_notifier_2d.h index 38da69faef..ef0e1affd3 100644 --- a/scene/2d/visibility_notifier_2d.h +++ b/scene/2d/visibility_notifier_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/y_sort.cpp b/scene/2d/y_sort.cpp index f258b7e2e0..e0fb3f0645 100644 --- a/scene/2d/y_sort.cpp +++ b/scene/2d/y_sort.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/2d/y_sort.h b/scene/2d/y_sort.h index 3564cfc151..de7aa3a317 100644 --- a/scene/2d/y_sort.h +++ b/scene/2d/y_sort.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/area.cpp b/scene/3d/area.cpp index c64b807e43..217cb71230 100644 --- a/scene/3d/area.cpp +++ b/scene/3d/area.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/area.h b/scene/3d/area.h index 5df308fc47..7ea97d0a8c 100644 --- a/scene/3d/area.h +++ b/scene/3d/area.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/arvr_nodes.cpp b/scene/3d/arvr_nodes.cpp index 3c99f7fb3a..caf313190b 100644 --- a/scene/3d/arvr_nodes.cpp +++ b/scene/3d/arvr_nodes.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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"); }; @@ -264,7 +264,7 @@ void ARVRAnchor::_notification(int p_what) { // our basis is scaled to the size of the plane the anchor is tracking // extract the size from our basis and reset the scale size = transform.basis.get_scale() * world_scale; - transform.basis.set_scale(Vector3(1.0, 1.0, 1.0)); + transform.basis.orthonormalize(); // apply our reference frame and set our transform set_transform(arvr_server->get_reference_frame() * transform); @@ -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/arvr_nodes.h b/scene/3d/arvr_nodes.h index 936519126b..4c14be71b5 100644 --- a/scene/3d/arvr_nodes.h +++ b/scene/3d/arvr_nodes.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index 1ae6f552f4..2073ebf94e 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -183,7 +183,7 @@ void AudioStreamPlayer3D::_mix_audio() { float AudioStreamPlayer3D::_get_attenuation_db(float p_distance) const { - float att; + float att = 0; switch (attenuation_model) { case ATTENUATION_INVERSE_DISTANCE: { att = Math::linear2db(1.0 / ((p_distance / unit_size) + 000001)); @@ -196,6 +196,10 @@ float AudioStreamPlayer3D::_get_attenuation_db(float p_distance) const { case ATTENUATION_LOGARITHMIC: { att = -20 * Math::log(p_distance / unit_size + 000001); } break; + default: { + ERR_PRINT("Unknown attenuation type"); + break; + } } att += unit_db; @@ -266,7 +270,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; @@ -526,13 +530,16 @@ void AudioStreamPlayer3D::_notification(int p_what) { setseek = setplay; active = true; setplay = -1; - _change_notify("playing"); //update property in editor + //do not update, this makes it easier to animate (will shut off otherise) + ///_change_notify("playing"); //update property in editor } //stop playing if no longer active if (!active) { set_fixed_process_internal(false); - _change_notify("playing"); //update property in editor + //do not update, this makes it easier to animate (will shut off otherise) + //_change_notify("playing"); //update property in editor + emit_signal("finished"); } } } @@ -554,12 +561,12 @@ void AudioStreamPlayer3D::set_stream(Ref<AudioStream> p_stream) { stream = p_stream; stream_playback = p_stream->instance_playback(); + AudioServer::get_singleton()->unlock(); + if (stream_playback.is_null()) { stream.unref(); ERR_FAIL_COND(stream_playback.is_null()); } - - AudioServer::get_singleton()->unlock(); } Ref<AudioStream> AudioStreamPlayer3D::get_stream() const { @@ -872,7 +879,7 @@ void AudioStreamPlayer3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_db", PROPERTY_HINT_RANGE, "-80,80"), "set_unit_db", "get_unit_db"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_size", PROPERTY_HINT_RANGE, "0.1,100,0.1"), "set_unit_size", "get_unit_size"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "max_db", PROPERTY_HINT_RANGE, "-24,6"), "set_max_db", "get_max_db"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_playing", "_is_active"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "play", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_playing", "_is_active"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "is_autoplay_enabled"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "max_distance", PROPERTY_HINT_RANGE, "0,65536,1"), "set_max_distance", "get_max_distance"); ADD_PROPERTY(PropertyInfo(Variant::INT, "out_of_range_mode", PROPERTY_HINT_ENUM, "Mix,Pause"), "set_out_of_range_mode", "get_out_of_range_mode"); @@ -898,6 +905,8 @@ void AudioStreamPlayer3D::_bind_methods() { BIND_ENUM_CONSTANT(DOPPLER_TRACKING_DISABLED); BIND_ENUM_CONSTANT(DOPPLER_TRACKING_IDLE_STEP); BIND_ENUM_CONSTANT(DOPPLER_TRACKING_FIXED_STEP); + + ADD_SIGNAL(MethodInfo("finished")); } AudioStreamPlayer3D::AudioStreamPlayer3D() { diff --git a/scene/3d/bone_attachment.cpp b/scene/3d/bone_attachment.cpp index b55b788b54..e1a5329fb0 100644 --- a/scene/3d/bone_attachment.cpp +++ b/scene/3d/bone_attachment.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/bone_attachment.h b/scene/3d/bone_attachment.h index 65908d98a8..159d16157a 100644 --- a/scene/3d/bone_attachment.h +++ b/scene/3d/bone_attachment.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/camera.cpp b/scene/3d/camera.cpp index 9db7253fd6..02a7845e0b 100644 --- a/scene/3d/camera.cpp +++ b/scene/3d/camera.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -339,15 +339,8 @@ Vector3 Camera::project_local_ray_normal(const Point2 &p_pos) const { ERR_FAIL_COND_V(!is_inside_tree(), Vector3()); } -#if 0 - Size2 viewport_size = get_viewport()->get_visible_rect().size; - Vector2 cpos = p_pos; -#else - Size2 viewport_size = get_viewport()->get_camera_rect_size(); Vector2 cpos = get_viewport()->get_camera_coords(p_pos); -#endif - Vector3 ray; if (mode == PROJECTION_ORTHOGONAL) { @@ -371,17 +364,9 @@ Vector3 Camera::project_ray_origin(const Point2 &p_pos) const { ERR_FAIL_COND_V(!is_inside_tree(), Vector3()); } -#if 0 - Size2 viewport_size = get_viewport()->get_visible_rect().size; - Vector2 cpos = p_pos; -#else - Size2 viewport_size = get_viewport()->get_camera_rect_size(); Vector2 cpos = get_viewport()->get_camera_coords(p_pos); -#endif - ERR_FAIL_COND_V(viewport_size.y == 0, Vector3()); - //float aspect = viewport_size.x / viewport_size.y; if (mode == PROJECTION_PERSPECTIVE) { diff --git a/scene/3d/camera.h b/scene/3d/camera.h index 70849791e5..243a7b9b39 100644 --- a/scene/3d/camera.h +++ b/scene/3d/camera.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/character_camera.cpp b/scene/3d/character_camera.cpp deleted file mode 100644 index ce047f91c2..0000000000 --- a/scene/3d/character_camera.cpp +++ /dev/null @@ -1,718 +0,0 @@ -/*************************************************************************/ -/* character_camera.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#include "character_camera.h" - -#include "physics_body.h" -#if 0 -void CharacterCamera::_set(const String& p_name, const Variant& p_value) { - - if (p_name=="type") - set_camera_type((CameraType)((int)(p_value))); - else if (p_name=="orbit") - set_orbit(p_value); - else if (p_name=="height") - set_height(p_value); - else if (p_name=="inclination") - set_inclination(p_value); - else if (p_name=="max_orbit_x") - set_max_orbit_x(p_value); - else if (p_name=="min_orbit_x") - set_min_orbit_x(p_value); - else if (p_name=="max_distance") - set_max_distance(p_value); - else if (p_name=="min_distance") - set_min_distance(p_value); - else if (p_name=="distance") - set_distance(p_value); - else if (p_name=="clip") - set_clip(p_value); - else if (p_name=="autoturn") - set_autoturn(p_value); - else if (p_name=="autoturn_tolerance") - set_autoturn_tolerance(p_value); - else if (p_name=="autoturn_speed") - set_autoturn_speed(p_value); - -} -Variant CharacterCamera::_get(const String& p_name) const { - - if (p_name=="type") - return get_camera_type(); - else if (p_name=="orbit") - return get_orbit(); - else if (p_name=="height") - return get_height(); - else if (p_name=="inclination") - return get_inclination(); - else if (p_name=="max_orbit_x") - return get_max_orbit_x(); - else if (p_name=="min_orbit_x") - return get_min_orbit_x(); - else if (p_name=="max_distance") - return get_max_distance(); - else if (p_name=="min_distance") - return get_min_distance(); - else if (p_name=="distance") - return get_distance(); - else if (p_name=="clip") - return has_clip(); - else if (p_name=="autoturn") - return has_autoturn(); - else if (p_name=="autoturn_tolerance") - return get_autoturn_tolerance(); - else if (p_name=="autoturn_speed") - return get_autoturn_speed(); - - return Variant(); -} - -void CharacterCamera::_get_property_list( List<PropertyInfo> *p_list) const { - - p_list->push_back( PropertyInfo( Variant::INT, "type", PROPERTY_HINT_ENUM, "Fixed,Follow") ); - p_list->push_back( PropertyInfo( Variant::VECTOR2, "orbit" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "height", PROPERTY_HINT_RANGE,"-1024,1024,0.01" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "inclination", PROPERTY_HINT_RANGE,"-90,90,0.01" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "max_orbit_x", PROPERTY_HINT_RANGE,"-90,90,0.01" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "min_orbit_x", PROPERTY_HINT_RANGE,"-90,90,0.01" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "min_distance", PROPERTY_HINT_RANGE,"0,100,0.01" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "max_distance", PROPERTY_HINT_RANGE,"0,100,0.01" ) ); - p_list->push_back( PropertyInfo( Variant::REAL, "distance", PROPERTY_HINT_RANGE,"0.01,1024,0,01") ); - p_list->push_back( PropertyInfo( Variant::BOOL, "clip") ); - p_list->push_back( PropertyInfo( Variant::BOOL, "autoturn") ); - p_list->push_back( PropertyInfo( Variant::REAL, "autoturn_tolerance", PROPERTY_HINT_RANGE,"1,90,0.01") ); - p_list->push_back( PropertyInfo( Variant::REAL, "autoturn_speed", PROPERTY_HINT_RANGE,"1,90,0.01") ); - - -} - -void CharacterCamera::_compute_camera() { - - - // update the transform with the next proposed transform (camera is 1 logic frame delayed) - - /* - float time = get_root_node()->get_frame_time(); - Vector3 oldp = accepted.get_origin(); - Vector3 newp = proposed.get_origin(); - - float frame_dist = time * - if (oldp.distance_to(newp) > - */ - - float time = get_root_node()->get_frame_time(); - - if (true) { - - if (clip_ray[0].clipped && clip_ray[1].clipped && clip_ray[2].clipped) { - //all have been clipped - proposed.origin=clip_ray[1].clip_pos; - - - } else { - - Vector3 rel=proposed.origin-target_pos; - - if (clip_ray[0].clipped && !clip_ray[2].clipped) { - - float distance = target_pos.distance_to(clip_ray[0].clip_pos); - real_t amount = 1.0-(distance/clip_len); - amount = CLAMP(amount,0,1); - - - rel=Matrix3(Vector3(0,1,0)), - rotate_orbit(Vector2(0,autoturn_speed*time*amount)); - } - if (clip_ray[2].clipped && !clip_ray[0].clipped) { - - float distance = target_pos.distance_to(clip_ray[2].clip_pos); - real_t amount = 1.0-(distance/clip_len); - amount = CLAMP(amount,0,1); - - rotate_orbit(Vector2(0,-autoturn_speed*time*amount)); - } - - } - } - - - Transform final; - - static float pos_ratio = 0.9; - static float rot_ratio = 10; - - Vector3 vec1 = accepted.origin; - Vector3 vec2 = proposed.origin; - final.origin = vec2.linear_interpolate(vec1, pos_ratio * time); - - Quat q1 = accepted.basis; - Quat q2 = proposed.basis; - final.basis = q1.slerp(q2, rot_ratio * time); - - accepted=final; - - _update_camera(); - - // calculate the next proposed transform - - - Vector3 new_pos; - Vector3 character_pos = get_global_transform().origin; - character_pos.y+=height; // height compensate - - if(type==CAMERA_FOLLOW) { - - - - /* calculate some variables */ - - Vector3 rel = follow_pos - character_pos; - - float l = rel.length(); - Vector3 rel_n = (l > 0) ? (rel/l) : Vector3(); -#if 1 - float ang = Math::acos(rel_n.dot( Vector3(0,1,0) )); - - Vector3 tangent = rel_n; - tangent.y=0; // get rid of y - if (tangent.length_squared() < CMP_EPSILON2) - tangent=Vector3(0,0,1); // use Z as tangent if rel is parallel to y - else - tangent.normalize(); - - /* now start applying the rules */ - - //clip distance - if (l > max_distance) - l=max_distance; - if (l < min_distance) - l=min_distance; - - //fix angle - - float ang_min = Math_PI * 0.5 + Math::deg2rad(min_orbit_x); - float ang_max = Math_PI * 0.5 + Math::deg2rad(max_orbit_x); - - if (ang<ang_min) - ang=ang_min; - if (ang>ang_max) - ang=ang_max; - - /* finally, rebuild the validated camera position */ - - new_pos=Vector3(0,Math::cos(ang),0); - new_pos+=tangent*Math::sin(ang); - new_pos*=l; - new_pos+=character_pos; -#else - if (l > max_distance) - l=max_distance; - if (l < min_distance) - l=min_distance; - - new_pos = character_pos + rel_n * l; - -#endif - follow_pos=new_pos; - - } else if (type==CAMERA_FIXED) { - - - if (distance<min_distance) - distance=min_distance; - if (distance>max_distance) - distance=max_distance; - - if (orbit.x<min_orbit_x) - orbit.x=min_orbit_x; - if (orbit.x>max_orbit_x) - orbit.x=max_orbit_x; - - Matrix3 m; - m.rotate(Vector3(0,1,0),-Math::deg2rad(orbit.y)); - m.rotate(Vector3(1,0,0),-Math::deg2rad(orbit.x)); - - new_pos = (m.get_axis(2) * distance) + character_pos; - - if (use_lookat_target) { - - Transform t = get_global_transform(); - Vector3 y = t.basis.get_axis(1).normalized(); - Vector3 z = lookat_target - character_pos; - z= (z - y * y.dot(z)).normalized(); - orbit.y = -Math::rad2deg(Math::atan2(z.x,z.z)) + 180; - - /* - Transform t = get_global_transform(); - Vector3 y = t.basis.get_axis(1).normalized(); - Vector3 z = lookat_target - t.origin; - z= (z - y * y.dot(z)).normalized(); - Vector3 x = z.cross(y).normalized(); - Transform t2; - t2.basis.set_axis(0,x); - t2.basis.set_axis(1,y); - t2.basis.set_axis(2,z); - t2.origin=t.origin; - - Vector3 local = t2.xform_inv(camera_pos); - - float ang = Math::atan2(local.x,local.y); - */ - - /* - - Vector3 vec1 = lookat_target - new_pos; - vec1.normalize(); - Vector3 vec2 = character_pos - new_pos; - vec2.normalize(); - - float dot = vec1.dot(vec2); - printf("dot %f\n", dot); - if ( dot < 0.5) { - - rotate_orbit(Vector2(0, 90)); - }; - */ - - - }; - } - - Vector3 target; - if (use_lookat_target) { - - target = lookat_target; - } else { - target = character_pos; - }; - - proposed.set_look_at(new_pos,target,Vector3(0,1,0)); - proposed = proposed * Transform(Matrix3(Vector3(1,0,0),Math::deg2rad(inclination)),Vector3()); //inclination - - - Vector<RID> exclude; - exclude.push_back(target_body); - - - - Vector3 rel = new_pos-target; - - for(int i=0;i<3;i++) { - - PhysicsServer::get_singleton()->query_intersection(clip_ray[i].query,get_world().get_space(),exclude); - PhysicsServer::get_singleton()->query_intersection_segment(clip_ray[i].query,target,target+Matrix3(Vector3(0,1,0),Math::deg2rad(autoturn_tolerance*(i-1.0))).xform(rel)); - clip_ray[i].clipped=false; - clip_ray[i].clip_pos=Vector3(); - } - target_pos=target; - clip_len=rel.length(); - - - -} - -void CharacterCamera::set_use_lookat_target(bool p_use, const Vector3 &p_lookat) { - - use_lookat_target = p_use; - lookat_target = p_lookat; -}; - - -void CharacterCamera::_notification(int p_what) { - - switch(p_what) { - - case NOTIFICATION_PROCESS: { - - - _compute_camera(); - } break; - - case NOTIFICATION_ENTER_SCENE: { - - if (type==CAMERA_FOLLOW) { - - set_orbit(orbit); - set_distance(distance); - } - - accepted=get_global_transform(); - proposed=accepted; - - target_body = RID(); - - Node* parent = get_parent(); - while (parent) { - PhysicsBody* p = parent->cast_to<PhysicsBody>(); - if (p) { - target_body = p->get_body(); - break; - }; - parent = parent->get_parent(); - }; - - } break; - - case NOTIFICATION_TRANSFORM_CHANGED: { - - } break; - case NOTIFICATION_EXIT_SCENE: { - - if (type==CAMERA_FOLLOW) { - distance=get_distance(); - orbit=get_orbit(); - - } - } break; - - case NOTIFICATION_BECAME_CURRENT: { - - set_process(true); - } break; - case NOTIFICATION_LOST_CURRENT: { - - set_process(false); - } break; - } - -} - - -void CharacterCamera::set_camera_type(CameraType p_camera_type) { - - - if (p_camera_type==type) - return; - - type=p_camera_type; - - // do conversions -} - -CharacterCamera::CameraType CharacterCamera::get_camera_type() const { - - return type; - -} - -void CharacterCamera::set_orbit(const Vector2& p_orbit) { - - orbit=p_orbit; - - if(type == CAMERA_FOLLOW && is_inside_scene()) { - - Vector3 char_pos = get_global_transform().origin; - char_pos.y+=height; - float d = char_pos.distance_to(follow_pos); - - Matrix3 m; - m.rotate(Vector3(0,1,0),-orbit.y); - m.rotate(Vector3(1,0,0),-orbit.x); - - follow_pos=char_pos + m.get_axis(2) * d; - - } - -} -void CharacterCamera::set_orbit_x(float p_x) { - - orbit.x=p_x; - if(type == CAMERA_FOLLOW && is_inside_scene()) - set_orbit(Vector2( p_x, get_orbit().y )); -} -void CharacterCamera::set_orbit_y(float p_y) { - - - orbit.y=p_y; - if(type == CAMERA_FOLLOW && is_inside_scene()) - set_orbit(Vector2( get_orbit().x, p_y )); - -} -Vector2 CharacterCamera::get_orbit() const { - - - if (type == CAMERA_FOLLOW && is_inside_scene()) { - - Vector3 char_pos = get_global_transform().origin; - char_pos.y+=height; - Vector3 rel = (follow_pos - char_pos).normalized(); - Vector2 ret_orbit; - ret_orbit.x = Math::acos( Vector3(0,1,0).dot( rel ) ) - Math_PI * 0.5; - ret_orbit.y = Math::atan2(rel.x,rel.z); - return ret_orbit; - } - return orbit; -} - -void CharacterCamera::rotate_orbit(const Vector2& p_relative) { - - if (type == CAMERA_FOLLOW && is_inside_scene()) { - - Matrix3 m; - m.rotate(Vector3(0,1,0),-Math::deg2rad(p_relative.y)); - m.rotate(Vector3(1,0,0),-Math::deg2rad(p_relative.x)); - - Vector3 char_pos = get_global_transform().origin; - char_pos.y+=height; - Vector3 rel = (follow_pos - char_pos); - rel = m.xform(rel); - follow_pos=char_pos+rel; - - } - - orbit+=p_relative; -} - -void CharacterCamera::set_height(float p_height) { - - - height=p_height; -} - -float CharacterCamera::get_height() const { - - return height; - -} - -void CharacterCamera::set_max_orbit_x(float p_max) { - - max_orbit_x=p_max; -} - -float CharacterCamera::get_max_orbit_x() const { - - return max_orbit_x; -} - -void CharacterCamera::set_min_orbit_x(float p_min) { - - min_orbit_x=p_min; -} - -float CharacterCamera::get_min_orbit_x() const { - - return min_orbit_x; -} - -float CharacterCamera::get_min_distance() const { - - return min_distance; -} -float CharacterCamera::get_max_distance() const { - - return max_distance; -} - -void CharacterCamera::set_min_distance(float p_min) { - - min_distance=p_min; -} - -void CharacterCamera::set_max_distance(float p_max) { - - max_distance = p_max; -} - - -void CharacterCamera::set_distance(float p_distance) { - - if (type == CAMERA_FOLLOW && is_inside_scene()) { - - Vector3 char_pos = get_global_transform().origin; - char_pos.y+=height; - Vector3 rel = (follow_pos - char_pos).normalized(); - rel*=p_distance; - follow_pos=char_pos+rel; - - } - - distance=p_distance; -} - -float CharacterCamera::get_distance() const { - - if (type == CAMERA_FOLLOW && is_inside_scene()) { - - Vector3 char_pos = get_global_transform().origin; - char_pos.y+=height; - return (follow_pos - char_pos).length(); - - } - - return distance; -} - -void CharacterCamera::set_clip(bool p_enabled) { - - - clip=p_enabled; -} - -bool CharacterCamera::has_clip() const { - - return clip; - -} - - -void CharacterCamera::set_autoturn(bool p_enabled) { - - - autoturn=p_enabled; -} - -bool CharacterCamera::has_autoturn() const { - - return autoturn; - -} - -void CharacterCamera::set_autoturn_tolerance(float p_degrees) { - - - autoturn_tolerance=p_degrees; -} -float CharacterCamera::get_autoturn_tolerance() const { - - - return autoturn_tolerance; -} - -void CharacterCamera::set_inclination(float p_degrees) { - - - inclination=p_degrees; -} -float CharacterCamera::get_inclination() const { - - - return inclination; -} - - -void CharacterCamera::set_autoturn_speed(float p_speed) { - - - autoturn_speed=p_speed; -} -float CharacterCamera::get_autoturn_speed() const { - - return autoturn_speed; - -} - - - - - -void CharacterCamera::_bind_methods() { - - ClassDB::bind_method(D_METHOD("set_camera_type","type"),&CharacterCamera::set_camera_type); - ClassDB::bind_method(D_METHOD("get_camera_type"),&CharacterCamera::get_camera_type); - ClassDB::bind_method(D_METHOD("set_orbit","orbit"),&CharacterCamera::set_orbit); - ClassDB::bind_method(D_METHOD("get_orbit"),&CharacterCamera::get_orbit); - ClassDB::bind_method(D_METHOD("set_orbit_x","x"),&CharacterCamera::set_orbit_x); - ClassDB::bind_method(D_METHOD("set_orbit_y","y"),&CharacterCamera::set_orbit_y); - ClassDB::bind_method(D_METHOD("set_min_orbit_x","x"),&CharacterCamera::set_min_orbit_x); - ClassDB::bind_method(D_METHOD("get_min_orbit_x"),&CharacterCamera::get_min_orbit_x); - ClassDB::bind_method(D_METHOD("set_max_orbit_x","x"),&CharacterCamera::set_max_orbit_x); - ClassDB::bind_method(D_METHOD("get_max_orbit_x"),&CharacterCamera::get_max_orbit_x); - ClassDB::bind_method(D_METHOD("rotate_orbit"),&CharacterCamera::rotate_orbit); - ClassDB::bind_method(D_METHOD("set_distance","distance"),&CharacterCamera::set_distance); - ClassDB::bind_method(D_METHOD("get_distance"),&CharacterCamera::get_distance); - ClassDB::bind_method(D_METHOD("set_clip","enable"),&CharacterCamera::set_clip); - ClassDB::bind_method(D_METHOD("has_clip"),&CharacterCamera::has_clip); - ClassDB::bind_method(D_METHOD("set_autoturn","enable"),&CharacterCamera::set_autoturn); - ClassDB::bind_method(D_METHOD("has_autoturn"),&CharacterCamera::has_autoturn); - ClassDB::bind_method(D_METHOD("set_autoturn_tolerance","degrees"),&CharacterCamera::set_autoturn_tolerance); - ClassDB::bind_method(D_METHOD("get_autoturn_tolerance"),&CharacterCamera::get_autoturn_tolerance); - ClassDB::bind_method(D_METHOD("set_autoturn_speed","speed"),&CharacterCamera::set_autoturn_speed); - ClassDB::bind_method(D_METHOD("get_autoturn_speed"),&CharacterCamera::get_autoturn_speed); - ClassDB::bind_method(D_METHOD("set_use_lookat_target","use","lookat"),&CharacterCamera::set_use_lookat_target, DEFVAL(Vector3())); - - ClassDB::bind_method(D_METHOD("_ray_collision"),&CharacterCamera::_ray_collision); - - BIND_ENUM_CONSTANT( CAMERA_FIXED ); - BIND_ENUM_CONSTANT( CAMERA_FOLLOW ); -} - -void CharacterCamera::_ray_collision(Vector3 p_point, Vector3 p_normal, int p_subindex, ObjectID p_against,int p_idx) { - - - clip_ray[p_idx].clip_pos=p_point; - clip_ray[p_idx].clipped=true; -}; - -Transform CharacterCamera::get_camera_transform() const { - - return accepted; -} - - -CharacterCamera::CharacterCamera() { - - - type=CAMERA_FOLLOW; - height=1; - - orbit=Vector2(0,0); - - distance=3; - min_distance=2; - max_distance=5; - - autoturn=false; - autoturn_tolerance=15; - autoturn_speed=20; - - min_orbit_x=-50; - max_orbit_x=70; - inclination=0; - - clip=false; - use_lookat_target = false; - - for(int i=0;i<3;i++) { - clip_ray[i].query=PhysicsServer::get_singleton()->query_create(this, "_ray_collision", i, true); - clip_ray[i].clipped=false; - } - - -} - -CharacterCamera::~CharacterCamera() { - - for(int i=0;i<3;i++) { - PhysicsServer::get_singleton()->free(clip_ray[i].query); - } - - -} -#endif diff --git a/scene/3d/character_camera.h b/scene/3d/character_camera.h deleted file mode 100644 index c3a1c70d5e..0000000000 --- a/scene/3d/character_camera.h +++ /dev/null @@ -1,167 +0,0 @@ -/*************************************************************************/ -/* character_camera.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef CHARACTER_CAMERA_H -#define CHARACTER_CAMERA_H - -#include "scene/3d/camera.h" -#if 0 -class CharacterCamera : public Camera { - - GDCLASS( CharacterCamera, Camera ); -public: - - enum CameraType { - CAMERA_FIXED, - CAMERA_FOLLOW - }; - -private: - - - CameraType type; - - //used for follow - Vector3 follow_pos; - //used for fixed - Vector2 orbit; - float distance; - - float height; - - float min_distance; - float max_distance; - - float max_orbit_x; - float min_orbit_x; - - float inclination; - - bool clip; - bool autoturn; - float autoturn_tolerance; - float autoturn_speed; - - - - struct ClipRay { - RID query; - bool clipped; - Vector3 clip_pos; - }; - - ClipRay clip_ray[3]; - Vector3 target_pos; - float clip_len; - - - Transform accepted; - Vector3 proposed_pos; - - bool use_lookat_target; - Vector3 lookat_target; - - void _compute_camera(); - - RID ray_query; - RID left_turn_query; - RID right_turn_query; - RID target_body; - -protected: - - virtual void _request_camera_update() {} //ignore - - bool _set(const StringName& p_name, const Variant& p_value); - bool _get(const StringName& p_name,Variant &r_ret) const; - void _get_property_list( List<PropertyInfo> *p_list) const; - void _notification(int p_what); - - static void _bind_methods(); - - void _ray_collision(Vector3 p_point, Vector3 p_normal, int p_subindex, ObjectID p_against,int p_idx); - -public: - - - void set_camera_type(CameraType p_camera_type); - CameraType get_camera_type() const; - - void set_orbit(const Vector2& p_orbit); - void set_orbit_x(float p_x); - void set_orbit_y(float p_y); - Vector2 get_orbit() const; - - void set_height(float p_height); - float get_height() const; - - void set_inclination(float p_degrees); - float get_inclination() const; - - void set_max_orbit_x(float p_max); - float get_max_orbit_x() const; - - void set_min_orbit_x(float p_min); - float get_min_orbit_x() const; - - void rotate_orbit(const Vector2& p_relative); - - void set_distance(float p_distance); - float get_distance() const; - - float get_min_distance() const; - float get_max_distance() const; - void set_min_distance(float p_min); - void set_max_distance(float p_max); - - - void set_clip(bool p_enabled); - bool has_clip() const; - - void set_autoturn(bool p_enabled); - bool has_autoturn() const; - - void set_autoturn_tolerance(float p_degrees); - float get_autoturn_tolerance() const; - - void set_autoturn_speed(float p_speed); - float get_autoturn_speed() const; - - void set_use_lookat_target(bool p_use, const Vector3 &p_lookat = Vector3()); - - virtual Transform get_camera_transform() const; - - CharacterCamera(); - ~CharacterCamera(); -}; - -VARIANT_ENUM_CAST( CharacterCamera::CameraType ); - -#endif -#endif // CHARACTER_CAMERA_H diff --git a/scene/3d/collision_object.cpp b/scene/3d/collision_object.cpp index 1aba26673c..c121ef4566 100644 --- a/scene/3d/collision_object.cpp +++ b/scene/3d/collision_object.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "collision_object.h" + #include "scene/scene_string_names.h" #include "servers/physics_server.h" diff --git a/scene/3d/collision_object.h b/scene/3d/collision_object.h index 6c13e5d505..ac35de697c 100644 --- a/scene/3d/collision_object.h +++ b/scene/3d/collision_object.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/collision_polygon.cpp b/scene/3d/collision_polygon.cpp index 0c61c96d07..382cbb8f38 100644 --- a/scene/3d/collision_polygon.cpp +++ b/scene/3d/collision_polygon.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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_polygon.h b/scene/3d/collision_polygon.h index beefae182c..dbed1d7154 100644 --- a/scene/3d/collision_polygon.h +++ b/scene/3d/collision_polygon.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/collision_shape.cpp b/scene/3d/collision_shape.cpp index 2aa6a95718..5f1151f8e9 100644 --- a/scene/3d/collision_shape.cpp +++ b/scene/3d/collision_shape.cpp @@ -1,9 +1,9 @@ /*************************************************************************/ -/* body_shape.cpp */ +/* collision_shape.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/collision_shape.h b/scene/3d/collision_shape.h index 277e0dfa77..94621177cb 100644 --- a/scene/3d/collision_shape.h +++ b/scene/3d/collision_shape.h @@ -1,9 +1,9 @@ /*************************************************************************/ -/* body_shape.h */ +/* collision_shape.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/gi_probe.cpp b/scene/3d/gi_probe.cpp index 460580d4fe..7792a86b4a 100644 --- a/scene/3d/gi_probe.cpp +++ b/scene/3d/gi_probe.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -548,8 +548,8 @@ void GIProbe::_plot_face(int p_idx, int p_level, int p_x, int p_y, int p_z, cons //plot the face by guessing it's albedo and emission value //find best axis to map to, for scanning values - int closest_axis; - float closest_dot; + int closest_axis = 0; + float closest_dot = 0; Plane plane = Plane(p_vtx[0], p_vtx[1], p_vtx[2]); Vector3 normal = plane.normal; @@ -1091,8 +1091,8 @@ 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>(); - if (mi && mi->get_flag(GeometryInstance::FLAG_USE_BAKED_LIGHT)) { + MeshInstance *mi = Object::cast_to<MeshInstance>(p_at_node); + if (mi && mi->get_flag(GeometryInstance::FLAG_USE_BAKED_LIGHT) && mi->is_visible_in_tree()) { Ref<Mesh> mesh = mi->get_mesh(); if (mesh.is_valid()) { @@ -1113,26 +1113,28 @@ 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) { + if (s->is_visible_in_tree()) { - Transform mxf = meshes[i]; - Ref<Mesh> mesh = meshes[i + 1]; - if (!mesh.is_valid()) - continue; + Array meshes = p_at_node->call("get_meshes"); + for (int i = 0; i < meshes.size(); i += 2) { - Rect3 aabb = mesh->get_aabb(); + Transform mxf = meshes[i]; + Ref<Mesh> mesh = meshes[i + 1]; + if (!mesh.is_valid()) + continue; - Transform xf = get_global_transform().affine_inverse() * (s->get_global_transform() * mxf); + Rect3 aabb = mesh->get_aabb(); - if (Rect3(-extents, extents * 2).intersects(xf.xform(aabb))) { - Baker::PlotMesh pm; - pm.local_xform = xf; - pm.mesh = mesh; - p_baker->mesh_list.push_back(pm); + Transform xf = get_global_transform().affine_inverse() * (s->get_global_transform() * mxf); + + if (Rect3(-extents, extents * 2).intersects(xf.xform(aabb))) { + Baker::PlotMesh pm; + pm.local_xform = xf; + pm.mesh = mesh; + p_baker->mesh_list.push_back(pm); + } } } } diff --git a/scene/3d/gi_probe.h b/scene/3d/gi_probe.h index 8346437ebd..5a06984a47 100644 --- a/scene/3d/gi_probe.h +++ b/scene/3d/gi_probe.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/immediate_geometry.cpp b/scene/3d/immediate_geometry.cpp index 060e088750..64d3f4fcab 100644 --- a/scene/3d/immediate_geometry.cpp +++ b/scene/3d/immediate_geometry.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/immediate_geometry.h b/scene/3d/immediate_geometry.h index bc8452c7e0..6db825bf54 100644 --- a/scene/3d/immediate_geometry.h +++ b/scene/3d/immediate_geometry.h @@ -1,9 +1,9 @@ /*************************************************************************/ -/* immediate_geometry.h */ +/* immediate_geometry.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/interpolated_camera.cpp b/scene/3d/interpolated_camera.cpp index a481018890..157ae42571 100644 --- a/scene/3d/interpolated_camera.cpp +++ b/scene/3d/interpolated_camera.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/interpolated_camera.h b/scene/3d/interpolated_camera.h index c302c32fc9..26e7278c99 100644 --- a/scene/3d/interpolated_camera.h +++ b/scene/3d/interpolated_camera.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/light.cpp b/scene/3d/light.cpp index f4b5cc5731..d410ba1e2a 100644 --- a/scene/3d/light.cpp +++ b/scene/3d/light.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -230,7 +230,6 @@ void Light::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::COLOR, "shadow_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_shadow_color", "get_shadow_color"); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "shadow_bias", PROPERTY_HINT_RANGE, "-16,16,0.01"), "set_param", "get_param", PARAM_SHADOW_BIAS); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "shadow_contact", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_param", "get_param", PARAM_CONTACT_SHADOW_SIZE); - ADD_PROPERTYI(PropertyInfo(Variant::REAL, "shadow_max_distance", PROPERTY_HINT_RANGE, "0,65536,0.1"), "set_param", "get_param", PARAM_SHADOW_MAX_DISTANCE); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shadow_reverse_cull_face"), "set_shadow_reverse_cull_face", "get_shadow_reverse_cull_face"); ADD_GROUP("Editor", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_only"), "set_editor_only", "is_editor_only"); @@ -308,6 +307,18 @@ DirectionalLight::ShadowMode DirectionalLight::get_shadow_mode() const { return shadow_mode; } +void DirectionalLight::set_shadow_depth_range(ShadowDepthRange p_range) { + shadow_depth_range=p_range; + VS::get_singleton()->light_directional_set_shadow_depth_range_mode(light, VS::LightDirectionalShadowDepthRangeMode(p_range)); + +} + +DirectionalLight::ShadowDepthRange DirectionalLight::get_shadow_depth_range() const { + + return shadow_depth_range; +} + + void DirectionalLight::set_blend_splits(bool p_enable) { blend_splits = p_enable; @@ -324,6 +335,9 @@ void DirectionalLight::_bind_methods() { ClassDB::bind_method(D_METHOD("set_shadow_mode", "mode"), &DirectionalLight::set_shadow_mode); ClassDB::bind_method(D_METHOD("get_shadow_mode"), &DirectionalLight::get_shadow_mode); + ClassDB::bind_method(D_METHOD("set_shadow_depth_range", "mode"), &DirectionalLight::set_shadow_depth_range); + ClassDB::bind_method(D_METHOD("get_shadow_depth_range"), &DirectionalLight::get_shadow_depth_range); + ClassDB::bind_method(D_METHOD("set_blend_splits", "enabled"), &DirectionalLight::set_blend_splits); ClassDB::bind_method(D_METHOD("is_blend_splits_enabled"), &DirectionalLight::is_blend_splits_enabled); @@ -334,19 +348,28 @@ void DirectionalLight::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "directional_shadow_split_3", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_param", "get_param", PARAM_SHADOW_SPLIT_3_OFFSET); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "directional_shadow_blend_splits"), "set_blend_splits", "is_blend_splits_enabled"); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "directional_shadow_normal_bias", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_param", "get_param", PARAM_SHADOW_NORMAL_BIAS); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "directional_shadow_bias_split_scale", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_param", "get_param", PARAM_SHADOW_BIAS_SPLIT_SCALE); + ADD_PROPERTY(PropertyInfo(Variant::INT, "directional_shadow_depth_range", PROPERTY_HINT_ENUM, "Stable,Optimized"), "set_shadow_depth_range", "get_shadow_depth_range"); + ADD_PROPERTYI(PropertyInfo(Variant::REAL, "directional_shadow_max_distance", PROPERTY_HINT_RANGE, "0,65536,0.1"), "set_param", "get_param", PARAM_SHADOW_MAX_DISTANCE); BIND_ENUM_CONSTANT(SHADOW_ORTHOGONAL); BIND_ENUM_CONSTANT(SHADOW_PARALLEL_2_SPLITS); BIND_ENUM_CONSTANT(SHADOW_PARALLEL_4_SPLITS); + + BIND_ENUM_CONSTANT( SHADOW_DEPTH_RANGE_STABLE ); + BIND_ENUM_CONSTANT( SHADOW_DEPTH_RANGE_OPTIMIZED ); } DirectionalLight::DirectionalLight() : Light(VisualServer::LIGHT_DIRECTIONAL) { - set_param(PARAM_SHADOW_NORMAL_BIAS, 0.2); - set_param(PARAM_SHADOW_BIAS, 1.0); + set_param(PARAM_SHADOW_NORMAL_BIAS, 0.8); + set_param(PARAM_SHADOW_BIAS, 0.1); set_param(PARAM_SHADOW_MAX_DISTANCE, 200); + set_param(PARAM_SHADOW_BIAS_SPLIT_SCALE, 0.25); set_shadow_mode(SHADOW_PARALLEL_4_SPLITS); + set_shadow_depth_range(SHADOW_DEPTH_RANGE_STABLE); + blend_splits = false; } diff --git a/scene/3d/light.h b/scene/3d/light.h index 788e948536..6aa0220265 100644 --- a/scene/3d/light.h +++ b/scene/3d/light.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -38,8 +38,6 @@ @author Juan Linietsky <reduzio@gmail.com> */ -class BakedLight; - class Light : public VisualInstance { GDCLASS(Light, VisualInstance); @@ -60,6 +58,7 @@ public: PARAM_SHADOW_SPLIT_3_OFFSET = VS::LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET, PARAM_SHADOW_NORMAL_BIAS = VS::LIGHT_PARAM_SHADOW_NORMAL_BIAS, PARAM_SHADOW_BIAS = VS::LIGHT_PARAM_SHADOW_BIAS, + PARAM_SHADOW_BIAS_SPLIT_SCALE = VS::LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE, PARAM_MAX = VS::LIGHT_PARAM_MAX }; @@ -134,9 +133,15 @@ public: SHADOW_PARALLEL_4_SPLITS }; + enum ShadowDepthRange { + SHADOW_DEPTH_RANGE_STABLE = VS::LIGHT_DIRECTIONAL_SHADOW_DEPTH_RANGE_STABLE, + SHADOW_DEPTH_RANGE_OPTIMIZED = VS::LIGHT_DIRECTIONAL_SHADOW_DEPTH_RANGE_OPTIMIZED, + }; + private: bool blend_splits; ShadowMode shadow_mode; + ShadowDepthRange shadow_depth_range; protected: static void _bind_methods(); @@ -145,6 +150,9 @@ public: void set_shadow_mode(ShadowMode p_mode); ShadowMode get_shadow_mode() const; + void set_shadow_depth_range(ShadowDepthRange p_mode); + ShadowDepthRange get_shadow_depth_range() const; + void set_blend_splits(bool p_enable); bool is_blend_splits_enabled() const; @@ -152,6 +160,7 @@ public: }; VARIANT_ENUM_CAST(DirectionalLight::ShadowMode) +VARIANT_ENUM_CAST(DirectionalLight::ShadowDepthRange) class OmniLight : public Light { diff --git a/scene/3d/listener.cpp b/scene/3d/listener.cpp index c7d3bac2f8..51cf9fb89b 100644 --- a/scene/3d/listener.cpp +++ b/scene/3d/listener.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/listener.h b/scene/3d/listener.h index b66fc7fc38..2c800443b4 100644 --- a/scene/3d/listener.h +++ b/scene/3d/listener.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp index da25afbf57..c8215971c4 100644 --- a/scene/3d/mesh_instance.cpp +++ b/scene/3d/mesh_instance.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/mesh_instance.h b/scene/3d/mesh_instance.h index 1bb2c97d10..8e8c12a592 100644 --- a/scene/3d/mesh_instance.h +++ b/scene/3d/mesh_instance.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/multimesh_instance.cpp b/scene/3d/multimesh_instance.cpp index b51953f27c..f90489f1f0 100644 --- a/scene/3d/multimesh_instance.cpp +++ b/scene/3d/multimesh_instance.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/multimesh_instance.h b/scene/3d/multimesh_instance.h index 7e14d567ac..cd0e7b463c 100644 --- a/scene/3d/multimesh_instance.h +++ b/scene/3d/multimesh_instance.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp index a1183326d7..d8c7a78648 100644 --- a/scene/3d/navigation.cpp +++ b/scene/3d/navigation.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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.h b/scene/3d/navigation.h index 80699fce72..010d16dedd 100644 --- a/scene/3d/navigation.h +++ b/scene/3d/navigation.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/navigation_mesh.cpp b/scene/3d/navigation_mesh.cpp index 5d4568f5d3..7a55f956e0 100644 --- a/scene/3d/navigation_mesh.cpp +++ b/scene/3d/navigation_mesh.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/navigation_mesh.h b/scene/3d/navigation_mesh.h index e5a3dc7b43..36fe3ee34b 100644 --- a/scene/3d/navigation_mesh.h +++ b/scene/3d/navigation_mesh.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp index 70f46e3a0a..80c706898d 100644 --- a/scene/3d/particles.cpp +++ b/scene/3d/particles.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/particles.h b/scene/3d/particles.h index 9c1436a47b..2c109d6ec8 100644 --- a/scene/3d/particles.h +++ b/scene/3d/particles.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/path.cpp b/scene/3d/path.cpp index 0ca7f96fd7..ed4d88417c 100644 --- a/scene/3d/path.cpp +++ b/scene/3d/path.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -33,24 +33,6 @@ #include "scene/scene_string_names.h" void Path::_notification(int p_what) { -#if 0 - if (p_what==NOTIFICATION_DRAW && curve.is_valid() && is_inside_scene() && Engine::get_singleton()->is_editor_hint()) { - //draw the curve!! - - for(int i=0;i<curve->get_point_count();i++) { - - Vector2 prev_p=curve->get_point_pos(i); - - for(int j=1;j<=8;j++) { - - real_t frac = j/8.0; - Vector2 p = curve->interpolate(i,frac); - draw_line(prev_p,p,Color(0.5,0.6,1.0,0.7),2); - prev_p=p; - } - } - } -#endif } void Path::_curve_changed() { @@ -174,8 +156,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/path.h b/scene/3d/path.h index eeae0668a7..0f9a169f72 100644 --- a/scene/3d/path.h +++ b/scene/3d/path.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 402cd6314b..6a8226c0e1 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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 @@ -842,7 +842,7 @@ void RigidBody::_bind_methods() { ClassDB::bind_method(D_METHOD("get_colliding_bodies"), &RigidBody::get_colliding_bodies); - BIND_VMETHOD(MethodInfo("_integrate_forces", PropertyInfo(Variant::OBJECT, "state:PhysicsDirectBodyState"))); + BIND_VMETHOD(MethodInfo("_integrate_forces", PropertyInfo(Variant::OBJECT, "state", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsDirectBodyState"))); ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Rigid,Static,Character,Kinematic"), "set_mode", "get_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "mass", PROPERTY_HINT_EXP_RANGE, "0.01,65535,0.01"), "set_mass", "get_mass"); @@ -912,34 +912,24 @@ RigidBody::~RigidBody() { ////////////////////////////////////////////////////// ////////////////////////// -Dictionary KinematicBody::_move(const Vector3 &p_motion) { +Ref<KinematicCollision> KinematicBody::_move(const Vector3 &p_motion) { Collision col; - if (move(p_motion, col)) { - Dictionary d; - d["position"] = col.collision; - d["normal"] = col.collision; - d["local_shape"] = col.local_shape; - d["travel"] = col.travel; - d["remainder"] = col.remainder; - d["collider_id"] = col.collider; - if (col.collider) { - d["collider"] = ObjectDB::get_instance(col.collider); - } else { - d["collider"] = Variant(); + if (move_and_collide(p_motion, col)) { + if (motion_cache.is_null()) { + motion_cache.instance(); + motion_cache->owner = this; } - d["collider_shape_index"] = col.collider_shape; - d["collider_metadata"] = col.collider_metadata; - - return d; + motion_cache->collision = col; - } else { - return Dictionary(); + return motion_cache; } + + return Ref<KinematicCollision>(); } -bool KinematicBody::move(const Vector3 &p_motion, Collision &r_collision) { +bool KinematicBody::move_and_collide(const Vector3 &p_motion, Collision &r_collision) { Transform gt = get_global_transform(); PhysicsServer::MotionResult result; @@ -963,7 +953,7 @@ bool KinematicBody::move(const Vector3 &p_motion, Collision &r_collision) { return colliding; } -Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction, float p_slope_stop_min_velocity, int p_max_bounces, float p_floor_max_angle) { +Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction, float p_slope_stop_min_velocity, int p_max_slides, float p_floor_max_angle) { Vector3 motion = (floor_velocity + p_linear_velocity) * get_fixed_process_delta_time(); Vector3 lv = p_linear_velocity; @@ -974,11 +964,11 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve colliders.clear(); floor_velocity = Vector3(); - while (p_max_bounces) { + while (p_max_slides) { Collision collision; - bool collided = move(motion, collision); + bool collided = move_and_collide(motion, collision); if (collided) { @@ -1016,7 +1006,7 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve break; } - p_max_bounces--; + p_max_slides--; if (motion == Vector3()) break; } @@ -1058,79 +1048,36 @@ float KinematicBody::get_safe_margin() const { return margin; } - -int KinematicBody::get_collision_count() const { +int KinematicBody::get_slide_count() const { return colliders.size(); } -Vector3 KinematicBody::get_collision_position(int p_collision) const { - - ERR_FAIL_INDEX_V(p_collision, colliders.size(), Vector3()); - return colliders[p_collision].collision; -} -Vector3 KinematicBody::get_collision_normal(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), Vector3()); - return colliders[p_collision].normal; +KinematicBody::Collision KinematicBody::get_slide_collision(int p_bounce) const { + ERR_FAIL_INDEX_V(p_bounce, colliders.size(), Collision()); + return colliders[p_bounce]; } -Vector3 KinematicBody::get_collision_travel(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), Vector3()); - return colliders[p_collision].travel; -} -Vector3 KinematicBody::get_collision_remainder(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), Vector3()); - return colliders[p_collision].remainder; -} -Object *KinematicBody::get_collision_local_shape(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), NULL); - uint32_t owner = shape_find_owner(colliders[p_collision].local_shape); - return shape_owner_get_owner(owner); -} -Object *KinematicBody::get_collision_collider(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), NULL); +Ref<KinematicCollision> KinematicBody::_get_slide_collision(int p_bounce) { - if (colliders[p_collision].collider) { - return ObjectDB::get_instance(colliders[p_collision].collider); + ERR_FAIL_INDEX_V(p_bounce, colliders.size(), Ref<KinematicCollision>()); + if (p_bounce > slide_colliders.size()) { + slide_colliders.resize(p_bounce + 1); } - return NULL; -} -ObjectID KinematicBody::get_collision_collider_id(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), 0); - - return colliders[p_collision].collider; -} -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>(); - if (obj2d) { - uint32_t owner = shape_find_owner(colliders[p_collision].collider_shape); - return obj2d->shape_owner_get_owner(owner); - } + if (slide_colliders[p_bounce].is_null()) { + slide_colliders[p_bounce].instance(); + slide_colliders[p_bounce]->owner = this; } - return NULL; -} -int KinematicBody::get_collision_collider_shape_index(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), -1); - return colliders[p_collision].collider_shape; -} -Vector3 KinematicBody::get_collision_collider_velocity(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), Vector3()); - return colliders[p_collision].collider_vel; -} -Variant KinematicBody::get_collision_collider_metadata(int p_collision) const { - ERR_FAIL_INDEX_V(p_collision, colliders.size(), Variant()); - return colliders[p_collision].collider_metadata; + slide_colliders[p_bounce]->collision = colliders[p_bounce]; + return slide_colliders[p_bounce]; } void KinematicBody::_bind_methods() { - ClassDB::bind_method(D_METHOD("move", "rel_vec"), &KinematicBody::_move); - ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "slope_stop_min_velocity", "max_bounces", "floor_max_angle"), &KinematicBody::move_and_slide, DEFVAL(Vector3(0, 0, 0)), DEFVAL(0.05), DEFVAL(4), DEFVAL(Math::deg2rad((float)45))); + ClassDB::bind_method(D_METHOD("move_and_collide", "rel_vec"), &KinematicBody::_move); + ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "slope_stop_min_velocity", "max_slides", "floor_max_angle"), &KinematicBody::move_and_slide, DEFVAL(Vector3(0, 0, 0)), DEFVAL(0.05), DEFVAL(4), DEFVAL(Math::deg2rad((float)45))); ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec"), &KinematicBody::test_move); @@ -1142,18 +1089,8 @@ void KinematicBody::_bind_methods() { ClassDB::bind_method(D_METHOD("set_safe_margin", "pixels"), &KinematicBody::set_safe_margin); ClassDB::bind_method(D_METHOD("get_safe_margin"), &KinematicBody::get_safe_margin); - ClassDB::bind_method(D_METHOD("get_collision_count"), &KinematicBody::get_collision_count); - ClassDB::bind_method(D_METHOD("get_collision_position", "collision"), &KinematicBody::get_collision_position); - ClassDB::bind_method(D_METHOD("get_collision_normal", "collision"), &KinematicBody::get_collision_normal); - ClassDB::bind_method(D_METHOD("get_collision_travel", "collision"), &KinematicBody::get_collision_travel); - ClassDB::bind_method(D_METHOD("get_collision_remainder", "collision"), &KinematicBody::get_collision_remainder); - ClassDB::bind_method(D_METHOD("get_collision_local_shape", "collision"), &KinematicBody::get_collision_local_shape); - ClassDB::bind_method(D_METHOD("get_collision_collider", "collision"), &KinematicBody::get_collision_collider); - ClassDB::bind_method(D_METHOD("get_collision_collider_id", "collision"), &KinematicBody::get_collision_collider_id); - ClassDB::bind_method(D_METHOD("get_collision_collider_shape", "collision"), &KinematicBody::get_collision_collider_shape); - ClassDB::bind_method(D_METHOD("get_collision_collider_shape_index", "collision"), &KinematicBody::get_collision_collider_shape_index); - ClassDB::bind_method(D_METHOD("get_collision_collider_velocity", "collision"), &KinematicBody::get_collision_collider_velocity); - ClassDB::bind_method(D_METHOD("get_collision_collider_metadata", "collision"), &KinematicBody::get_collision_collider_metadata); + ClassDB::bind_method(D_METHOD("get_slide_count"), &KinematicBody::get_slide_count); + ClassDB::bind_method(D_METHOD("get_slide_collision", "slide_idx"), &KinematicBody::_get_slide_collision); ADD_PROPERTY(PropertyInfo(Variant::REAL, "collision/safe_margin", PROPERTY_HINT_RANGE, "0.001,256,0.001"), "set_safe_margin", "get_safe_margin"); } @@ -1168,4 +1105,106 @@ KinematicBody::KinematicBody() on_wall = false; } KinematicBody::~KinematicBody() { + + if (motion_cache.is_valid()) { + motion_cache->owner = NULL; + } + + for (int i = 0; i < slide_colliders.size(); i++) { + if (slide_colliders[i].is_valid()) { + slide_colliders[i]->owner = NULL; + } + } +} +/////////////////////////////////////// + +Vector3 KinematicCollision::get_position() const { + + return collision.collision; +} +Vector3 KinematicCollision::get_normal() const { + return collision.normal; +} +Vector3 KinematicCollision::get_travel() const { + return collision.travel; +} +Vector3 KinematicCollision::get_remainder() const { + return collision.remainder; +} +Object *KinematicCollision::get_local_shape() const { + ERR_FAIL_COND_V(!owner, NULL); + uint32_t ownerid = owner->shape_find_owner(collision.local_shape); + return owner->shape_owner_get_owner(ownerid); +} + +Object *KinematicCollision::get_collider() const { + + if (collision.collider) { + return ObjectDB::get_instance(collision.collider); + } + + return NULL; +} +ObjectID KinematicCollision::get_collider_id() const { + + return collision.collider; +} +Object *KinematicCollision::get_collider_shape() const { + + Object *collider = get_collider(); + if (collider) { + CollisionObject *obj2d = Object::cast_to<CollisionObject>(collider); + if (obj2d) { + uint32_t ownerid = obj2d->shape_find_owner(collision.collider_shape); + return obj2d->shape_owner_get_owner(ownerid); + } + } + + return NULL; +} +int KinematicCollision::get_collider_shape_index() const { + + return collision.collider_shape; +} +Vector3 KinematicCollision::get_collider_velocity() const { + + return collision.collider_vel; +} +Variant KinematicCollision::get_collider_metadata() const { + + return Variant(); +} + +void KinematicCollision::_bind_methods() { + + ClassDB::bind_method(D_METHOD("get_position"), &KinematicCollision::get_position); + ClassDB::bind_method(D_METHOD("get_normal"), &KinematicCollision::get_normal); + ClassDB::bind_method(D_METHOD("get_travel"), &KinematicCollision::get_travel); + ClassDB::bind_method(D_METHOD("get_remainder"), &KinematicCollision::get_remainder); + ClassDB::bind_method(D_METHOD("get_local_shape"), &KinematicCollision::get_local_shape); + ClassDB::bind_method(D_METHOD("get_collider"), &KinematicCollision::get_collider); + ClassDB::bind_method(D_METHOD("get_collider_id"), &KinematicCollision::get_collider_id); + ClassDB::bind_method(D_METHOD("get_collider_shape"), &KinematicCollision::get_collider_shape); + ClassDB::bind_method(D_METHOD("get_collider_shape_index"), &KinematicCollision::get_collider_shape_index); + ClassDB::bind_method(D_METHOD("get_collider_velocity"), &KinematicCollision::get_collider_velocity); + ClassDB::bind_method(D_METHOD("get_collider_metadata"), &KinematicCollision::get_collider_metadata); + + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "position"), "", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "normal"), "", "get_normal"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "travel"), "", "get_travel"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "remainder"), "", "get_remainder"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "local_shape"), "", "get_local_shape"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "collider"), "", "get_collider"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "collider_id"), "", "get_collider_id"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "collider_shape"), "", "get_collider_shape"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "collider_shape_index"), "", "get_collider_shape_index"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "collider_velocity"), "", "get_collider_velocity"); + ADD_PROPERTY(PropertyInfo(Variant::NIL, "collider_metadata", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT), "", "get_collider_metadata"); +} + +KinematicCollision::KinematicCollision() { + collision.collider = 0; + collision.collider_shape = 0; + collision.local_shape = 0; + owner = NULL; } diff --git a/scene/3d/physics_body.h b/scene/3d/physics_body.h index 83811a1d93..f88b3860dc 100644 --- a/scene/3d/physics_body.h +++ b/scene/3d/physics_body.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -261,6 +261,8 @@ public: VARIANT_ENUM_CAST(RigidBody::Mode); VARIANT_ENUM_CAST(RigidBody::AxisLock); +class KinematicCollision; + class KinematicBody : public PhysicsBody { GDCLASS(KinematicBody, PhysicsBody); @@ -286,42 +288,62 @@ private: bool on_ceiling; bool on_wall; Vector<Collision> colliders; + Vector<Ref<KinematicCollision> > slide_colliders; + Ref<KinematicCollision> motion_cache; _FORCE_INLINE_ bool _ignores_mode(PhysicsServer::BodyMode) const; - Dictionary _move(const Vector3 &p_motion); + Ref<KinematicCollision> _move(const Vector3 &p_motion); + Ref<KinematicCollision> _get_slide_collision(int p_bounce); protected: static void _bind_methods(); public: - bool move(const Vector3 &p_motion, Collision &r_collision); + bool move_and_collide(const Vector3 &p_motion, Collision &r_collision); bool test_move(const Transform &p_from, const Vector3 &p_motion); void set_safe_margin(float p_margin); float get_safe_margin() const; - Vector3 move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction = Vector3(0, 0, 0), float p_slope_stop_min_velocity = 0.05, int p_max_bounces = 4, float p_floor_max_angle = Math::deg2rad((float)45)); + Vector3 move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction = Vector3(0, 0, 0), float p_slope_stop_min_velocity = 0.05, int p_max_slides = 4, float p_floor_max_angle = Math::deg2rad((float)45)); bool is_on_floor() const; bool is_on_wall() const; bool is_on_ceiling() const; Vector3 get_floor_velocity() const; - int get_collision_count() const; - Vector3 get_collision_position(int p_collision) const; - Vector3 get_collision_normal(int p_collision) const; - Vector3 get_collision_travel(int p_collision) const; - Vector3 get_collision_remainder(int p_collision) const; - Object *get_collision_local_shape(int p_collision) const; - Object *get_collision_collider(int p_collision) const; - ObjectID get_collision_collider_id(int p_collision) const; - Object *get_collision_collider_shape(int p_collision) const; - int get_collision_collider_shape_index(int p_collision) const; - Vector3 get_collision_collider_velocity(int p_collision) const; - Variant get_collision_collider_metadata(int p_collision) const; + int get_slide_count() const; + Collision get_slide_collision(int p_bounce) const; KinematicBody(); ~KinematicBody(); }; +class KinematicCollision : public Reference { + + GDCLASS(KinematicCollision, Reference); + + KinematicBody *owner; + friend class KinematicBody; + KinematicBody::Collision collision; + +protected: + static void _bind_methods(); + +public: + Vector3 get_position() const; + Vector3 get_normal() const; + Vector3 get_travel() const; + Vector3 get_remainder() const; + Object *get_local_shape() const; + Object *get_collider() const; + ObjectID get_collider_id() const; + Object *get_collider_shape() const; + int get_collider_shape_index() const; + Vector3 get_collider_velocity() const; + Variant get_collider_metadata() const; + + KinematicCollision(); +}; + #endif // PHYSICS_BODY__H diff --git a/scene/3d/physics_joint.cpp b/scene/3d/physics_joint.cpp index 55007c6dc6..aa127ab79f 100644 --- a/scene/3d/physics_joint.cpp +++ b/scene/3d/physics_joint.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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; @@ -973,301 +973,3 @@ Generic6DOFJoint::Generic6DOFJoint() { set_flag_z(FLAG_ENABLE_LINEAR_LIMIT, true); set_flag_z(FLAG_ENABLE_MOTOR, false); } - -#if 0 - -void PhysicsJoint::_set(const String& p_name, const Variant& p_value) { - - if (p_name=="body_A") - set_body_a(p_value); - else if (p_name=="body_B") - set_body_b(p_value); - else if (p_name=="active") - set_active(p_value); - else if (p_name=="no_collision") - set_disable_collision(p_value); -} -Variant PhysicsJoint::_get(const String& p_name) const { - - if (p_name=="body_A") - return get_body_a(); - else if (p_name=="body_B") - return get_body_b(); - else if (p_name=="active") - return is_active(); - else if (p_name=="no_collision") - return has_disable_collision(); - - return Variant(); -} -void PhysicsJoint::_get_property_list( List<PropertyInfo> *p_list) const { - - - p_list->push_back( PropertyInfo( Variant::NODE_PATH, "body_A" ) ); - p_list->push_back( PropertyInfo( Variant::NODE_PATH, "body_B" ) ); - p_list->push_back( PropertyInfo( Variant::BOOL, "active" ) ); - p_list->push_back( PropertyInfo( Variant::BOOL, "no_collision" ) ); -} -void PhysicsJoint::_notification(int p_what) { - - - switch(p_what) { - - case NOTIFICATION_PARENT_CONFIGURED: { - - _connect(); - if (get_root_node()->get_editor() && !indicator.is_valid()) { - - indicator=VisualServer::get_singleton()->poly_create(); - RID mat=VisualServer::get_singleton()->fixed_material_create(); - VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_UNSHADED, true ); - VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_ONTOP, true ); - VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_WIREFRAME, true ); - VisualServer::get_singleton()->material_set_flag( mat, VisualServer::MATERIAL_FLAG_DOUBLE_SIDED, true ); - VisualServer::get_singleton()->material_set_line_width( mat, 3 ); - - VisualServer::get_singleton()->poly_set_material(indicator,mat,true); - _update_indicator(); - - } - - if (indicator.is_valid()) { - - indicator_instance=VisualServer::get_singleton()->instance_create(indicator,get_world()->get_scenario()); - VisualServer::get_singleton()->instance_attach_object_instance_id( indicator_instance,get_instance_id() ); - } - } break; - case NOTIFICATION_TRANSFORM_CHANGED: { - - if (indicator_instance.is_valid()) { - - VisualServer::get_singleton()->instance_set_transform(indicator_instance,get_global_transform()); - } - } break; - case NOTIFICATION_EXIT_SCENE: { - - if (indicator_instance.is_valid()) { - - VisualServer::get_singleton()->free(indicator_instance); - } - _disconnect(); - - } break; - - } -} - - -RID PhysicsJoint::_get_visual_instance_rid() const { - - return indicator_instance; - -} - -void PhysicsJoint::_bind_methods() { - - ClassDB::bind_method(D_METHOD("_get_visual_instance_rid"),&PhysicsJoint::_get_visual_instance_rid); - ClassDB::bind_method(D_METHOD("set_body_a","path"),&PhysicsJoint::set_body_a); - ClassDB::bind_method(D_METHOD("set_body_b"),&PhysicsJoint::set_body_b); - ClassDB::bind_method(D_METHOD("get_body_a","path"),&PhysicsJoint::get_body_a); - ClassDB::bind_method(D_METHOD("get_body_b"),&PhysicsJoint::get_body_b); - - ClassDB::bind_method(D_METHOD("set_active","active"),&PhysicsJoint::set_active); - ClassDB::bind_method(D_METHOD("is_active"),&PhysicsJoint::is_active); - - ClassDB::bind_method(D_METHOD("set_disable_collision","disable"),&PhysicsJoint::set_disable_collision); - ClassDB::bind_method(D_METHOD("has_disable_collision"),&PhysicsJoint::has_disable_collision); - - - ClassDB::bind_method("reconnect",&PhysicsJoint::reconnect); - - ClassDB::bind_method(D_METHOD("get_rid"),&PhysicsJoint::get_rid); - -} - -void PhysicsJoint::set_body_a(const NodePath& p_path) { - - _disconnect(); - body_A=p_path; - _connect(); - _change_notify("body_A"); -} -void PhysicsJoint::set_body_b(const NodePath& p_path) { - - _disconnect(); - body_B=p_path; - _connect(); - _change_notify("body_B"); - -} -NodePath PhysicsJoint::get_body_a() const { - - return body_A; -} -NodePath PhysicsJoint::get_body_b() const { - - return body_B; -} - -void PhysicsJoint::set_active(bool p_active) { - - active=p_active; - if (is_inside_scene()) { - PhysicsServer::get_singleton()->joint_set_active(joint,active); - } - _change_notify("active"); -} - -void PhysicsJoint::set_disable_collision(bool p_active) { - - if (no_collision==p_active) - return; - _disconnect(); - no_collision=p_active; - _connect(); - - _change_notify("no_collision"); -} -bool PhysicsJoint::has_disable_collision() const { - - return no_collision; -} - - - -bool PhysicsJoint::is_active() const { - - return active; -} - -void PhysicsJoint::_disconnect() { - - if (!is_inside_scene()) - return; - - if (joint.is_valid()) - PhysicsServer::get_singleton()->free(joint); - - joint=RID(); - - 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; - - if (!A ||!B) - return; - - if (no_collision) - PhysicsServer::get_singleton()->body_remove_collision_exception(A->get_body(),B->get_body()); - -} -void PhysicsJoint::_connect() { - - if (!is_inside_scene()) - return; - - ERR_FAIL_COND(joint.is_valid()); - - 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; - - if (!A && !B) - return; - - if (B && !A) - SWAP(B,A); - - joint = create(A,B); - - if (A<B) - SWAP(A,B); - - if (no_collision) - PhysicsServer::get_singleton()->body_add_collision_exception(A->get_body(),B->get_body()); - - - -} - -void PhysicsJoint::reconnect() { - - _disconnect(); - _connect(); - -} - - -RID PhysicsJoint::get_rid() { - - return joint; -} - - -PhysicsJoint::PhysicsJoint() { - - active=true; - no_collision=true; -} - - -PhysicsJoint::~PhysicsJoint() { - - if (indicator.is_valid()) { - - VisualServer::get_singleton()->free(indicator); - } - -} - -/* PIN */ - -void PhysicsJointPin::_update_indicator() { - - - VisualServer::get_singleton()->poly_clear(indicator); - - Vector<Color> colors; - colors.push_back( Color(0.3,0.9,0.2,0.7) ); - colors.push_back( Color(0.3,0.9,0.2,0.7) ); - - Vector<Vector3> points; - points.resize(2); - points[0]=Vector3(Vector3(-0.2,0,0)); - points[1]=Vector3(Vector3(0.2,0,0)); - VisualServer::get_singleton()->poly_add_primitive(indicator,points,Vector<Vector3>(),colors,Vector<Vector3>()); - - points[0]=Vector3(Vector3(0,-0.2,0)); - points[1]=Vector3(Vector3(0,0.2,0)); - VisualServer::get_singleton()->poly_add_primitive(indicator,points,Vector<Vector3>(),colors,Vector<Vector3>()); - - points[0]=Vector3(Vector3(0,0,-0.2)); - points[1]=Vector3(Vector3(0,0,0.2)); - VisualServer::get_singleton()->poly_add_primitive(indicator,points,Vector<Vector3>(),colors,Vector<Vector3>()); - -} - -RID PhysicsJointPin::create(PhysicsBody*A,PhysicsBody*B) { - - RID body_A = A->get_body(); - RID body_B = B?B->get_body():RID(); - - ERR_FAIL_COND_V( !body_A.is_valid(), RID() ); - - Vector3 pin_pos = get_global_transform().origin; - - if (body_B.is_valid()) - return PhysicsServer::get_singleton()->joint_create_double_pin_global(body_A,pin_pos,body_B,pin_pos); - else - return PhysicsServer::get_singleton()->joint_create_pin(body_A,A->get_global_transform().xform_inv(pin_pos),pin_pos); -} - -PhysicsJointPin::PhysicsJointPin() { - - -} -#endif diff --git a/scene/3d/physics_joint.h b/scene/3d/physics_joint.h index b834aaf6d2..b94297da30 100644 --- a/scene/3d/physics_joint.h +++ b/scene/3d/physics_joint.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -321,73 +321,4 @@ public: VARIANT_ENUM_CAST(Generic6DOFJoint::Param); VARIANT_ENUM_CAST(Generic6DOFJoint::Flag); -#if 0 -class PhysicsJoint : public Spatial { - - GDCLASS(PhysicsJoint,Spatial); - OBJ_CATEGORY("3D Physics Nodes"); - - NodePath body_A; - NodePath body_B; - bool active; - bool no_collision; - - - RID indicator_instance; - - RID _get_visual_instance_rid() const; -protected: - - RID joint; - RID indicator; - - bool _set(const StringName& p_name, const Variant& p_value); - bool _get(const StringName& p_name,Variant &r_ret) const; - void _get_property_list( List<PropertyInfo> *p_list) const; - void _notification(int p_what); - static void _bind_methods(); - - virtual RID create(PhysicsBody*A,PhysicsBody*B)=0; - virtual void _update_indicator()=0; - - void _disconnect(); - void _connect(); -public: - - void set_body_a(const NodePath& p_path); - void set_body_b(const NodePath& p_path); - NodePath get_body_a() const; - NodePath get_body_b() const; - - void set_active(bool p_active); - bool is_active() const; - - void set_disable_collision(bool p_active); - bool has_disable_collision() const; - - void reconnect(); - - RID get_rid(); - - PhysicsJoint(); - ~PhysicsJoint(); -}; - - - -class PhysicsJointPin : public PhysicsJoint { - - GDCLASS( PhysicsJointPin, PhysicsJoint ); - -protected: - - virtual void _update_indicator(); - virtual RID create(PhysicsBody*A,PhysicsBody*B); -public: - - - PhysicsJointPin(); -}; - #endif // PHYSICS_JOINT_H -#endif diff --git a/scene/3d/portal.cpp b/scene/3d/portal.cpp index d77dde1dd8..6c14f7dbc9 100644 --- a/scene/3d/portal.cpp +++ b/scene/3d/portal.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -32,6 +32,8 @@ #include "scene/resources/surface_tool.h" #include "servers/visual_server.h" +// FIXME: This will be removed, kept as reference for new implementation +#if 0 bool Portal::_set(const StringName &p_name, const Variant &p_value) { if (p_name == "shape") { @@ -226,3 +228,4 @@ Portal::~Portal() { VisualServer::get_singleton()->free(portal); } +#endif diff --git a/scene/3d/portal.h b/scene/3d/portal.h index 7c25e4904b..6de3df8553 100644 --- a/scene/3d/portal.h +++ b/scene/3d/portal.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -39,7 +39,8 @@ If a portal is placed next (very close to) a similar, opposing portal, they automatically connect, otherwise, a portal connects to the parent room */ - +//this will be redone and replaced by area portals, left for reference since a new class with this name will have to exist and want to reuse the gizmos +#if 0 class Portal : public VisualInstance { GDCLASS(Portal, VisualInstance); @@ -85,3 +86,4 @@ public: }; #endif +#endif diff --git a/scene/3d/position_3d.cpp b/scene/3d/position_3d.cpp index 4e66ef13c0..d0df985ac4 100644 --- a/scene/3d/position_3d.cpp +++ b/scene/3d/position_3d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/position_3d.h b/scene/3d/position_3d.h index 0adde19342..8083c33196 100644 --- a/scene/3d/position_3d.h +++ b/scene/3d/position_3d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/proximity_group.cpp b/scene/3d/proximity_group.cpp index d0410f2c55..2288d8b08b 100644 --- a/scene/3d/proximity_group.cpp +++ b/scene/3d/proximity_group.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/proximity_group.h b/scene/3d/proximity_group.h index fec3add41f..d003d2f525 100644 --- a/scene/3d/proximity_group.h +++ b/scene/3d/proximity_group.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/ray_cast.cpp b/scene/3d/ray_cast.cpp index b0aab6cc4d..72b7706b77 100644 --- a/scene/3d/ray_cast.cpp +++ b/scene/3d/ray_cast.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/ray_cast.h b/scene/3d/ray_cast.h index e9b34c4f75..fd566cd343 100644 --- a/scene/3d/ray_cast.h +++ b/scene/3d/ray_cast.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/reflection_probe.cpp b/scene/3d/reflection_probe.cpp index 194146b6b3..46b105cd21 100644 --- a/scene/3d/reflection_probe.cpp +++ b/scene/3d/reflection_probe.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/reflection_probe.h b/scene/3d/reflection_probe.h index d2a5facb5f..7c328a8f16 100644 --- a/scene/3d/reflection_probe.h +++ b/scene/3d/reflection_probe.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/remote_transform.cpp b/scene/3d/remote_transform.cpp index 492930ea9b..8faf985b11 100644 --- a/scene/3d/remote_transform.cpp +++ b/scene/3d/remote_transform.cpp @@ -1,10 +1,9 @@ - /*************************************************************************/ -/* remote_transform.cpp */ +/* remote_transform.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -51,11 +50,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 +172,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/remote_transform.h b/scene/3d/remote_transform.h index c25b57966e..51a0bf35a3 100644 --- a/scene/3d/remote_transform.h +++ b/scene/3d/remote_transform.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/room_instance.cpp b/scene/3d/room_instance.cpp index c5ea6c54da..439b6bfdf8 100644 --- a/scene/3d/room_instance.cpp +++ b/scene/3d/room_instance.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -31,6 +31,8 @@ #include "servers/visual_server.h" +// FIXME: Will be removed, kept as reference for new implementation +#if 0 #include "geometry.h" #include "project_settings.h" #include "scene/resources/surface_tool.h" @@ -45,7 +47,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 +105,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); @@ -158,3 +160,4 @@ Room::Room() { Room::~Room() { } +#endif diff --git a/scene/3d/room_instance.h b/scene/3d/room_instance.h index 4176da92e8..b9a64b6670 100644 --- a/scene/3d/room_instance.h +++ b/scene/3d/room_instance.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -44,6 +44,9 @@ */ +//this will be removed, left for reference +#if 0 + class Room : public VisualInstance { GDCLASS(Room, VisualInstance); @@ -77,5 +80,5 @@ public: Room(); ~Room(); }; - +#endif #endif // ROOM_INSTANCE_H diff --git a/scene/3d/scenario_fx.cpp b/scene/3d/scenario_fx.cpp index 0780ce22ff..8102b3f15c 100644 --- a/scene/3d/scenario_fx.cpp +++ b/scene/3d/scenario_fx.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/scenario_fx.h b/scene/3d/scenario_fx.h index d1e0a63130..acf6a18526 100644 --- a/scene/3d/scenario_fx.h +++ b/scene/3d/scenario_fx.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/skeleton.cpp b/scene/3d/skeleton.cpp index cee97af244..d0e0937eca 100644 --- a/scene/3d/skeleton.cpp +++ b/scene/3d/skeleton.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/skeleton.h b/scene/3d/skeleton.h index a6546af64e..fdc1100472 100644 --- a/scene/3d/skeleton.h +++ b/scene/3d/skeleton.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index 6498238e12..7db3bb18bd 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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(); } @@ -185,8 +185,13 @@ void Spatial::_notification(int p_what) { get_tree()->call_group_flags(0, SceneStringNames::get_singleton()->_spatial_editor_group, SceneStringNames::get_singleton()->_request_gizmo, this); if (!data.gizmo_disabled) { - if (data.gizmo.is_valid()) + if (data.gizmo.is_valid()) { data.gizmo->create(); + if (data.gizmo->can_draw()) { + data.gizmo->redraw(); + } + data.gizmo->transform(); + } } } #endif @@ -281,37 +286,6 @@ Transform Spatial::get_global_transform() const { return data.global_transform; } -#if 0 -void Spatial::add_child_notify(Node *p_child) { -/* - Spatial *s=p_child->cast_to<Spatial>(); - if (!s) - return; - - ERR_FAIL_COND(data.children_lock>0); - - s->data.dirty=DIRTY_GLOBAL; // don't allow global transform to be valid - s->data.parent=this; - data.children.push_back(s); - s->data.C=data.children.back(); -*/ -} - -void Spatial::remove_child_notify(Node *p_child) { -/* - Spatial *s=p_child->cast_to<Spatial>(); - if (!s) - return; - - ERR_FAIL_COND(data.children_lock>0); - - if (s->data.C) - data.children.erase(s->data.C); - s->data.parent=NULL; - s->data.C=NULL; -*/ -} -#endif Spatial *Spatial::get_parent_spatial() const { @@ -449,7 +423,9 @@ void Spatial::set_gizmo(const Ref<SpatialGizmo> &p_gizmo) { if (data.gizmo.is_valid() && is_inside_world()) { data.gizmo->create(); - data.gizmo->redraw(); + if (data.gizmo->can_draw()) { + data.gizmo->redraw(); + } data.gizmo->transform(); } @@ -471,12 +447,16 @@ Ref<SpatialGizmo> Spatial::get_gizmo() const { void Spatial::_update_gizmo() { + if (!is_inside_world()) + return; data.gizmo_dirty = false; if (data.gizmo.is_valid()) { - if (is_visible_in_tree()) - data.gizmo->redraw(); - else - data.gizmo->clear(); + if (data.gizmo->can_draw()) { + if (is_visible_in_tree()) + data.gizmo->redraw(); + else + data.gizmo->clear(); + } } } diff --git a/scene/3d/spatial.h b/scene/3d/spatial.h index f22b19d3cc..3f205ea86b 100644 --- a/scene/3d/spatial.h +++ b/scene/3d/spatial.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -47,6 +47,7 @@ public: virtual void clear() = 0; virtual void redraw() = 0; virtual void free() = 0; + virtual bool can_draw() const = 0; SpatialGizmo(); }; diff --git a/scene/3d/spatial_indexer.cpp b/scene/3d/spatial_indexer.cpp deleted file mode 100644 index 7090c974a3..0000000000 --- a/scene/3d/spatial_indexer.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/*************************************************************************/ -/* spatial_indexer.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#include "spatial_indexer.h" - -#if 0 - -#include "camera.h" -#include "proximity_area.h" -#include "scene/scene_string_names.h" - -void SpatialIndexer::add_camera(Camera* p_camera) { - - cameras.insert(p_camera); -} - -void SpatialIndexer::remove_camera(Camera* p_camera){ - - for (Set<ProximityArea*>::Element *F=proximity_areas.front();F;F=F->next()) { - - ProximityArea *prox = F->get(); - TK<Camera> k; - k.against=p_camera; - k.area=prox; - if (camera_pairs.has(k)) { - camera_pairs.erase(k); - prox->area_exit(ProximityArea::TRACK_CAMERAS,p_camera); - } - } - cameras.erase(p_camera); - -} - -void SpatialIndexer::update_camera(Camera* p_camera) { - - - _request_update(); -} - -void SpatialIndexer::_update_pairs() { - - // brute force interseciton code, no broadphase - // will implement broadphase in the future - - for (Set<Camera*>::Element *E=cameras.front();E;E=E->next()) { - - Camera *cam = E->get(); - Vector<Plane> cplanes = cam->get_frustum(); - - for (Set<ProximityArea*>::Element *F=proximity_areas.front();F;F=F->next()) { - - ProximityArea *prox = F->get(); - - bool inters=false; - - if (prox->get_track_flag(ProximityArea::TRACK_CAMERAS)) { - - AABB aabb = prox->get_global_transform().xform(prox->get_aabb()); - if (aabb.intersects_convex_shape(cplanes.ptr(),cplanes.size())) - inters=true; - } - - TK<Camera> k; - k.against=cam; - k.area=prox; - - bool has = camera_pairs.has(k); - - if (inters==has) - continue; - - if (inters) { - camera_pairs.insert(k); - prox->area_enter(ProximityArea::TRACK_CAMERAS,cam); - } else { - - camera_pairs.erase(k); - prox->area_exit(ProximityArea::TRACK_CAMERAS,cam); - } - } - - } - - pending_update=false; -} - -void SpatialIndexer::_bind_methods() { - - - ClassDB::bind_method(D_METHOD("_update_pairs"),&SpatialIndexer::_update_pairs); -} - - -void SpatialIndexer::add_proximity_area(ProximityArea* p_area) { - - proximity_areas.insert(p_area); - -} - -void SpatialIndexer::remove_proximity_area(ProximityArea* p_area) { - - for (Set<Camera*>::Element *E=cameras.front();E;E=E->next()) { - - Camera *cam = E->get(); - TK<Camera> k; - k.against=cam; - k.area=p_area; - if (camera_pairs.has(k)) { - camera_pairs.erase(k); - p_area->area_exit(ProximityArea::TRACK_CAMERAS,cam); - } - } - proximity_areas.erase(p_area); - -} - -void SpatialIndexer::_request_update() { - - if (pending_update) - return; - pending_update=true; - call_deferred(SceneStringNames::get_singleton()->_update_pairs); - -} - -void SpatialIndexer::update_proximity_area_transform(ProximityArea* p_area) { - - _request_update(); -} - -void SpatialIndexer::update_proximity_area_flags(ProximityArea* p_area) { - - _request_update(); -} - -SpatialIndexer::SpatialIndexer() { - - pending_update=false; -} -#endif diff --git a/scene/3d/spatial_indexer.h b/scene/3d/spatial_indexer.h deleted file mode 100644 index c8bdf8950d..0000000000 --- a/scene/3d/spatial_indexer.h +++ /dev/null @@ -1,84 +0,0 @@ -/*************************************************************************/ -/* spatial_indexer.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef SPATIAL_INDEXER_H -#define SPATIAL_INDEXER_H - -#include "scene/3d/spatial.h" -#if 0 - -class Camera; -class ProximityArea; - -class SpatialIndexer : public Object { - - GDCLASS( SpatialIndexer, Object ); - - template<class T> - struct TK { - - T *against; - ProximityArea *area; - bool operator<(const TK<T>& p_k) const { return against==p_k.against ? area < p_k.area : against < p_k.against; } - }; - - - Set<Camera*> cameras; //cameras - Set<ProximityArea*> proximity_areas; - - Set<TK<Camera> > camera_pairs; - - bool pending_update; - void _update_pairs(); - void _request_update(); - -protected: - - static void _bind_methods(); - -friend class ProximityArea; -friend class Camera; - - void add_proximity_area(ProximityArea* p_area); - void remove_proximity_area(ProximityArea* p_area); - void update_proximity_area_transform(ProximityArea* p_area); - void update_proximity_area_flags(ProximityArea* p_area); - - void add_camera(Camera* p_camera); - void remove_camera(Camera* p_camera); - void update_camera(Camera* p_camera); - -public: - - - SpatialIndexer(); - -}; -#endif -#endif // SPATIAL_INDEXER_H diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index e45cb6d5b9..49a3205f21 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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); } } @@ -602,219 +598,6 @@ Sprite3D::Sprite3D() { //////////////////////////////////////// -#if 0 - -void AnimatedSprite3D::_draw() { - - RID immediate = get_immediate(); - VS::get_singleton()->immediate_clear(immediate); - - if (!frames.is_valid() || !frames->get_frame_count(animation) || frame<0 || frame>=frames->get_frame_count(animation)) { - return; - } - - Ref<Texture> texture = frames->get_frame(animation,frame); - if (!texture.is_valid()) - return; //no texuture no life - Vector2 tsize = texture->get_size(); - if (tsize.x==0 || tsize.y==0) - return; - - Size2i s=tsize; - Rect2i src_rect; - - src_rect.size=s; - - Point2i ofs=get_offset(); - if (is_centered()) - ofs-=s/2; - - Rect2i dst_rect(ofs,s); - - - Rect2 final_rect; - Rect2 final_src_rect; - if (!texture->get_rect_region(dst_rect,src_rect,final_rect,final_src_rect)) - return; - - - if (final_rect.size.x==0 || final_rect.size.y==0) - return; - - Color color=_get_color_accum(); - color.a*=get_opacity(); - - float pixel_size=get_pixel_size(); - - Vector2 vertices[4]={ - - (final_rect.pos+Vector2(0,final_rect.size.y)) * pixel_size, - (final_rect.pos+final_rect.size) * pixel_size, - (final_rect.pos+Vector2(final_rect.size.x,0)) * pixel_size, - final_rect.pos * pixel_size, - - - }; - Vector2 uvs[4]={ - final_src_rect.pos / tsize, - (final_src_rect.pos+Vector2(final_src_rect.size.x,0)) / tsize, - (final_src_rect.pos+final_src_rect.size) / tsize, - (final_src_rect.pos+Vector2(0,final_src_rect.size.y)) / tsize, - }; - - if (is_flipped_h()) { - SWAP(uvs[0],uvs[1]); - SWAP(uvs[2],uvs[3]); - } - if (is_flipped_v()) { - - SWAP(uvs[0],uvs[3]); - SWAP(uvs[1],uvs[2]); - } - - - Vector3 normal; - int axis = get_axis(); - normal[axis]=1.0; - - RID mat = VS::get_singleton()->material_2d_get(get_draw_flag(FLAG_SHADED),get_draw_flag(FLAG_TRANSPARENT),get_alpha_cut_mode()==ALPHA_CUT_DISCARD,get_alpha_cut_mode()==ALPHA_CUT_OPAQUE_PREPASS); - VS::get_singleton()->immediate_set_material(immediate,mat); - - VS::get_singleton()->immediate_begin(immediate,VS::PRIMITIVE_TRIANGLE_FAN,texture->get_rid()); - - int x_axis = ((axis + 1) % 3); - int y_axis = ((axis + 2) % 3); - - if (axis!=Vector3::AXIS_Z) { - SWAP(x_axis,y_axis); - - for(int i=0;i<4;i++) { - //uvs[i] = Vector2(1.0,1.0)-uvs[i]; - //SWAP(vertices[i].x,vertices[i].y); - if (axis==Vector3::AXIS_Y) { - vertices[i].y = - vertices[i].y; - } else if (axis==Vector3::AXIS_X) { - vertices[i].x = - vertices[i].x; - } - } - } - - AABB aabb; - - for(int i=0;i<4;i++) { - VS::get_singleton()->immediate_normal(immediate,normal); - VS::get_singleton()->immediate_color(immediate,color); - VS::get_singleton()->immediate_uv(immediate,uvs[i]); - - Vector3 vtx; - vtx[x_axis]=vertices[i][0]; - vtx[y_axis]=vertices[i][1]; - VS::get_singleton()->immediate_vertex(immediate,vtx); - if (i==0) { - aabb.pos=vtx; - aabb.size=Vector3(); - } else { - aabb.expand_to(vtx); - } - } - set_aabb(aabb); - VS::get_singleton()->immediate_end(immediate); - -} - -void AnimatedSprite3D::_bind_methods(){ - - ClassDB::bind_method(D_METHOD("set_sprite_frames","sprite_frames"),&AnimatedSprite3D::set_sprite_frames); - ClassDB::bind_method(D_METHOD("get_sprite_frames"),&AnimatedSprite3D::get_sprite_frames); - ClassDB::bind_method(D_METHOD("set_frame","frame"),&AnimatedSprite3D::set_frame); - ClassDB::bind_method(D_METHOD("get_frame"),&AnimatedSprite3D::get_frame); - - ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE,"SpriteFrames"), "set_sprite_frames","get_sprite_frames"); - ADD_PROPERTY( PropertyInfo( Variant::INT, "frame",PROPERTY_HINT_SPRITE_FRAME), "set_frame","get_frame"); - - ADD_SIGNAL(MethodInfo("frame_changed")); - -} - - - - -void AnimatedSprite3D::set_sprite_frames(const Ref<SpriteFrames>& p_sprite_frames) { - - - if (frames==p_sprite_frames) - return; - - if (frames.is_valid()) - frames->disconnect("changed",this,"_queue_update"); - frames=p_sprite_frames; - if (frames.is_valid()) - frames->connect("changed",this,"_queue_update"); - - if (!frames.is_valid() || frame >=frames->get_frame_count(animation)) { - frame=0; - - } - _queue_update(); - -} - -Ref<SpriteFrames> AnimatedSprite3D::get_sprite_frames() const{ - - return frames; -} - -void AnimatedSprite3D::set_frame(int p_frame){ - - if (frames.is_null()) - return; - - ERR_FAIL_INDEX(p_frame,frames->get_frame_count(animation)); - - if (frame==p_frame) - return; - - frame=p_frame; - _queue_update(); - emit_signal(SceneStringNames::get_singleton()->frame_changed); - -} -int AnimatedSprite3D::get_frame() const{ - - return frame; -} - -Rect2 AnimatedSprite3D::get_item_rect() const { - - if (!frames.is_valid() || !frames->get_frame_count(animation) || frame<0 || frame>=frames->get_frame_count(animation)) { - return Rect2(0,0,1,1); - } - - Ref<Texture> t = frames->get_frame(animation,frame); - if (t.is_null()) - return Rect2(0,0,1,1); - Size2i s = t->get_size(); - - Point2i ofs=get_offset(); - if (is_centered()) - ofs-=s/2; - - if (s==Size2(0,0)) - s=Size2(1,1); - - return Rect2(ofs,s); -} - - - -AnimatedSprite3D::AnimatedSprite3D() { - - animation="current"; - frame=0; -} - -#endif - void AnimatedSprite3D::_draw() { RID immediate = get_immediate(); @@ -1026,63 +809,6 @@ void AnimatedSprite3D::_notification(int p_what) { timeout -= to_process; } } break; -#if 0 - case NOTIFICATION_DRAW: { - - if (frames.is_null()) { - print_line("no draw no faemos"); - return; - } - - if (frame<0) { - print_line("no draw frame <0"); - return; - } - - if (!frames->has_animation(animation)) { - print_line("no draw no anim: "+String(animation)); - return; - } - - - - Ref<Texture> texture = frames->get_frame(animation,frame); - if (texture.is_null()) { - print_line("no draw texture is null"); - return; - } - - //print_line("DECIDED TO DRAW"); - - RID ci = get_canvas_item(); - - /* - texture->draw(ci,Point2()); - break; - */ - - Size2i s; - s = texture->get_size(); - Point2 ofs=offset; - if (centered) - ofs-=s/2; - - if (OS::get_singleton()->get_use_pixel_snap()) { - ofs=ofs.floor(); - } - Rect2 dst_rect(ofs,s); - - if (hflip) - dst_rect.size.x=-dst_rect.size.x; - if (vflip) - dst_rect.size.y=-dst_rect.size.y; - - //texture->draw_rect(ci,dst_rect,false,modulate); - texture->draw_rect_region(ci,dst_rect,Rect2(Vector2(),texture->get_size()),modulate); - //VisualServer::get_singleton()->canvas_item_add_texture_rect_region(ci,dst_rect,texture->get_rid(),src_rect,modulate); - - } break; -#endif } } diff --git a/scene/3d/sprite_3d.h b/scene/3d/sprite_3d.h index 7dc4cd4ffb..1165392cb2 100644 --- a/scene/3d/sprite_3d.h +++ b/scene/3d/sprite_3d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -181,37 +181,6 @@ public: //~Sprite3D(); }; -#if 0 -class AnimatedSprite3D : public SpriteBase3D { - - GDCLASS(AnimatedSprite3D,SpriteBase3D); - Ref<SpriteFrames> frames; - - - StringName animation; - int frame; - -protected: - virtual void _draw(); - static void _bind_methods(); -public: - - - - void set_sprite_frames(const Ref<SpriteFrames>& p_sprite_frames); - Ref<SpriteFrames> get_sprite_frames() const; - - void set_frame(int p_frame); - int get_frame() const; - - - virtual Rect2 get_item_rect() const; - - AnimatedSprite3D(); - //~AnimatedSprite3D(); -}; -#endif - class AnimatedSprite3D : public SpriteBase3D { GDCLASS(AnimatedSprite3D, SpriteBase3D); diff --git a/scene/3d/vehicle_body.cpp b/scene/3d/vehicle_body.cpp index 2a41c8f30e..d6b3206fbf 100644 --- a/scene/3d/vehicle_body.cpp +++ b/scene/3d/vehicle_body.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/vehicle_body.h b/scene/3d/vehicle_body.h index d778800814..d67209c58f 100644 --- a/scene/3d/vehicle_body.h +++ b/scene/3d/vehicle_body.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/visibility_notifier.cpp b/scene/3d/visibility_notifier.cpp index 0b77968dca..d3203bacec 100644 --- a/scene/3d/visibility_notifier.cpp +++ b/scene/3d/visibility_notifier.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/visibility_notifier.h b/scene/3d/visibility_notifier.h index 316b2c3575..0b83e0534e 100644 --- a/scene/3d/visibility_notifier.h +++ b/scene/3d/visibility_notifier.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/3d/visual_instance.cpp b/scene/3d/visual_instance.cpp index 7d61006529..0464a82f65 100644 --- a/scene/3d/visual_instance.cpp +++ b/scene/3d/visual_instance.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -29,7 +29,6 @@ /*************************************************************************/ #include "visual_instance.h" -#include "room_instance.h" #include "scene/scene_string_names.h" #include "servers/visual_server.h" #include "skeleton.h" @@ -54,32 +53,9 @@ void VisualInstance::_notification(int p_what) { case NOTIFICATION_ENTER_WORLD: { - // CHECK ROOM - Spatial *parent = get_parent_spatial(); - Room *room = NULL; - bool is_geom = cast_to<GeometryInstance>(); - - /* while(parent) { - - room = parent->cast_to<Room>(); - 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()); - break; - } - - parent=parent->get_parent_spatial(); - }*/ - - if (room) { - - VisualServer::get_singleton()->instance_set_room(instance, room->get_instance()); - } // 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() ); */ @@ -96,7 +72,6 @@ void VisualInstance::_notification(int p_what) { case NOTIFICATION_EXIT_WORLD: { VisualServer::get_singleton()->instance_set_scenario(instance, RID()); - VisualServer::get_singleton()->instance_set_room(instance, RID()); VisualServer::get_singleton()->instance_attach_skeleton(instance, RID()); //VS::get_singleton()->instance_geometry_set_baked_light_sampler(instance, RID() ); @@ -303,7 +278,6 @@ void GeometryInstance::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material_override", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial,SpatialMaterial"), "set_material_override", "get_material_override"); ADD_PROPERTY(PropertyInfo(Variant::INT, "cast_shadow", PROPERTY_HINT_ENUM, "Off,On,Double-Sided,Shadows Only"), "set_cast_shadows_setting", "get_cast_shadows_setting"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "extra_cull_margin", PROPERTY_HINT_RANGE, "0,16384,0"), "set_extra_cull_margin", "get_extra_cull_margin"); - ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "visible_in_all_rooms"), "set_flag", "get_flag", FLAG_VISIBLE_IN_ALL_ROOMS); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "use_in_baked_light"), "set_flag", "get_flag", FLAG_USE_BAKED_LIGHT); ADD_GROUP("LOD", "lod_"); @@ -314,7 +288,6 @@ void GeometryInstance::_bind_methods() { //ADD_SIGNAL( MethodInfo("visibility_changed")); - BIND_CONSTANT(FLAG_VISIBLE_IN_ALL_ROOMS); BIND_CONSTANT(FLAG_MAX); BIND_CONSTANT(SHADOW_CASTING_SETTING_OFF); diff --git a/scene/3d/visual_instance.h b/scene/3d/visual_instance.h index 694d0c2499..c405236d2c 100644 --- a/scene/3d/visual_instance.h +++ b/scene/3d/visual_instance.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -76,15 +76,12 @@ public: ~VisualInstance(); }; -class BakedLight; - class GeometryInstance : public VisualInstance { GDCLASS(GeometryInstance, VisualInstance); public: enum Flags { - FLAG_VISIBLE_IN_ALL_ROOMS = VS::INSTANCE_FLAG_VISIBLE_IN_ALL_ROOMS, FLAG_USE_BAKED_LIGHT = VS::INSTANCE_FLAG_USE_BAKED_LIGHT, FLAG_MAX = VS::INSTANCE_FLAG_MAX, }; diff --git a/scene/SCsub b/scene/SCsub index df52e9c6cb..513adeffda 100644 --- a/scene/SCsub +++ b/scene/SCsub @@ -27,7 +27,6 @@ SConscript('2d/SCsub') SConscript('animation/SCsub') SConscript('audio/SCsub') SConscript('resources/SCsub') -SConscript('io/SCsub') # Build it all as a library diff --git a/scene/animation/animation_cache.cpp b/scene/animation/animation_cache.cpp index 31fee0e347..b35b2568d1 100644 --- a/scene/animation/animation_cache.cpp +++ b/scene/animation/animation_cache.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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_cache.h b/scene/animation/animation_cache.h index 6687098d00..e593668df6 100644 --- a/scene/animation/animation_cache.h +++ b/scene/animation/animation_cache.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 3acb11541f..be0b652276 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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(); @@ -608,16 +608,6 @@ void AnimationPlayer::_animation_update_transforms() { ERR_CONTINUE(pa->accum_pass != accum_pass); -#if 1 - /* switch(pa->special) { - - - case SP_NONE: pa->object->set(pa->prop,pa->value_accum); break; //you are not speshul - case SP_NODE2D_POS: static_cast<Node2D*>(pa->object)->set_position(pa->value_accum); break; - case SP_NODE2D_ROT: static_cast<Node2D*>(pa->object)->set_rot(Math::deg2rad(pa->value_accum)); break; - case SP_NODE2D_SCALE: static_cast<Node2D*>(pa->object)->set_scale(pa->value_accum); break; - }*/ - switch (pa->special) { case SP_NONE: { @@ -657,10 +647,6 @@ void AnimationPlayer::_animation_update_transforms() { static_cast<Node2D *>(pa->object)->set_scale(pa->value_accum); } break; } -#else - - pa->object->set(pa->prop, pa->value_accum); -#endif } cache_update_prop_size = 0; @@ -668,8 +654,6 @@ void AnimationPlayer::_animation_update_transforms() { void AnimationPlayer::_animation_process(float p_delta) { - //bool any_active=false; - if (playback.current.from) { end_notify = false; diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index 01b709205a..c6e52145a8 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index fd8b33e666..e2330eb0d4 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h index 47f18795bd..609430340b 100644 --- a/scene/animation/animation_tree_player.h +++ b/scene/animation/animation_tree_player.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -347,7 +347,7 @@ public: void animation_node_set_master_animation(const StringName &p_node, const String &p_master_animation); String animation_node_get_master_animation(const StringName &p_node) const; - void animation_node_set_filter_path(const StringName &p_node, const NodePath &p_filter, bool p_enable); + void animation_node_set_filter_path(const StringName &p_node, const NodePath &p_track_path, bool p_filter); void animation_node_set_get_filtered_paths(const StringName &p_node, List<NodePath> *r_paths) const; bool animation_node_is_path_filtered(const StringName &p_node, const NodePath &p_path) const; diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index 45994ba050..fb61c43d5c 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -560,12 +560,16 @@ void Tween::_tween_process(float p_delta) { switch (data.type) { case INTER_PROPERTY: - case INTER_METHOD: - break; + case INTER_METHOD: { + Variant result = _run_equation(data); + emit_signal("tween_step", object, data.key, data.elapsed, result); + _apply_tween_value(data, result); + if (data.finish) + _apply_tween_value(data, data.final_val); + } break; + case INTER_CALLBACK: if (data.finish) { - - Variant::CallError error; if (data.call_deferred) { switch (data.args) { @@ -588,8 +592,8 @@ void Tween::_tween_process(float p_delta) { object->call_deferred(data.key, data.arg[0], data.arg[1], data.arg[2], data.arg[3], data.arg[4]); break; } - } else { + Variant::CallError error; Variant *arg[5] = { &data.arg[0], &data.arg[1], @@ -599,19 +603,11 @@ void Tween::_tween_process(float p_delta) { }; object->call(data.key, (const Variant **)arg, data.args, error); } - if (!repeat) - call_deferred("_remove", object, data.key, true); } - continue; + break; } - Variant result = _run_equation(data); - emit_signal("tween_step", object, data.key, data.elapsed, result); - - _apply_tween_value(data, result); - if (data.finish) { - _apply_tween_value(data, data.final_val); emit_signal("tween_completed", object, data.key); // not repeat mode, remove completed action if (!repeat) diff --git a/scene/animation/tween.h b/scene/animation/tween.h index 43234fab86..929d63a7fc 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/animation/tween_interpolaters.cpp b/scene/animation/tween_interpolaters.cpp index 434f4df3e1..8f543a575a 100644 --- a/scene/animation/tween_interpolaters.cpp +++ b/scene/animation/tween_interpolaters.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/audio/audio_player.cpp b/scene/audio/audio_player.cpp index d4d8f7dbed..341ae45ce8 100644 --- a/scene/audio/audio_player.cpp +++ b/scene/audio/audio_player.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -107,6 +107,15 @@ void AudioStreamPlayer::_notification(int p_what) { } } + if (p_what == NOTIFICATION_INTERNAL_PROCESS) { + + if (!active || (setseek < 0 && !stream_playback->is_playing())) { + active = false; + emit_signal("finished"); + set_process_internal(false); + } + } + if (p_what == NOTIFICATION_EXIT_TREE) { AudioServer::get_singleton()->remove_callback(_mix_audios, this); @@ -130,12 +139,12 @@ void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) { stream = p_stream; stream_playback = p_stream->instance_playback(); + AudioServer::get_singleton()->unlock(); + if (stream_playback.is_null()) { stream.unref(); ERR_FAIL_COND(stream_playback.is_null()); } - - AudioServer::get_singleton()->unlock(); } Ref<AudioStream> AudioStreamPlayer::get_stream() const { @@ -158,6 +167,7 @@ void AudioStreamPlayer::play(float p_from_pos) { mix_volume_db = volume_db; //reset volume ramp setseek = p_from_pos; active = true; + set_process_internal(true); } } @@ -172,6 +182,7 @@ void AudioStreamPlayer::stop() { if (stream_playback.is_valid()) { active = false; + set_process_internal(false); } } @@ -293,10 +304,12 @@ void AudioStreamPlayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "volume_db", PROPERTY_HINT_RANGE, "-80,24"), "set_volume_db", "get_volume_db"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_playing", "_is_active"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "play", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_playing", "_is_active"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "is_autoplay_enabled"); ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_target", PROPERTY_HINT_ENUM, "Stereo,Surround,Center"), "set_mix_target", "get_mix_target"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); + + ADD_SIGNAL(MethodInfo("finished")); } AudioStreamPlayer::AudioStreamPlayer() { diff --git a/scene/audio/audio_player.h b/scene/audio/audio_player.h index 8bd6844dec..4bfa84f766 100644 --- a/scene/audio/audio_player.h +++ b/scene/audio/audio_player.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index 9054063a4b..5713a35b7a 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "base_button.h" + #include "os/keyboard.h" #include "print_string.h" #include "scene/main/viewport.h" @@ -86,14 +87,14 @@ void BaseButton::_gui_input(Ref<InputEvent> p_event) { status.pressed = !status.pressed; pressed(); - if (get_script_instance()) { - Variant::CallError ce; - get_script_instance()->call(SceneStringNames::get_singleton()->_pressed, NULL, 0, ce); - } + emit_signal("pressed"); _unpress_group(); toggled(status.pressed); + if (get_script_instance()) { + get_script_instance()->call(SceneStringNames::get_singleton()->_toggled, status.pressed); + } emit_signal("toggled", status.pressed); } @@ -142,10 +143,10 @@ void BaseButton::_gui_input(Ref<InputEvent> p_event) { emit_signal("pressed"); toggled(status.pressed); - emit_signal("toggled", status.pressed); if (get_script_instance()) { get_script_instance()->call(SceneStringNames::get_singleton()->_toggled, status.pressed); } + emit_signal("toggled", status.pressed); } _unpress_group(); diff --git a/scene/gui/base_button.h b/scene/gui/base_button.h index dfcf3b0f8a..0c08dc53a3 100644 --- a/scene/gui/base_button.h +++ b/scene/gui/base_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/box_container.cpp b/scene/gui/box_container.cpp index 2cc4be96a7..739fd84b38 100644 --- a/scene/gui/box_container.cpp +++ b/scene/gui/box_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/box_container.h b/scene/gui/box_container.h index d544ff79d1..4d00a2011f 100644 --- a/scene/gui/box_container.h +++ b/scene/gui/box_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp index c8838f3eca..1fa03f81f4 100644 --- a/scene/gui/button.cpp +++ b/scene/gui/button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/button.h b/scene/gui/button.h index 499e44c0e1..dd6e730b86 100644 --- a/scene/gui/button.h +++ b/scene/gui/button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/button_group.cpp b/scene/gui/button_group.cpp deleted file mode 100644 index e54e810d7d..0000000000 --- a/scene/gui/button_group.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/*************************************************************************/ -/* button_group.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#include "button_group.h" - -#if 0 -#include "base_button.h" - -void ButtonGroup::_add_button(BaseButton *p_button) { - - buttons.insert(p_button); - p_button->set_toggle_mode(true); - p_button->set_click_on_press(true); - p_button->connect("pressed",this,"_pressed",make_binds(p_button)); - -} - -void ButtonGroup::_remove_button(BaseButton *p_button){ - - buttons.erase(p_button); - p_button->disconnect("pressed",this,"_pressed"); - -} - -void ButtonGroup::set_pressed_button(BaseButton *p_button) { - - _pressed(p_button); -} - -void ButtonGroup::_pressed(Object *p_button) { - - ERR_FAIL_NULL(p_button); - BaseButton *b=p_button->cast_to<BaseButton>(); - ERR_FAIL_COND(!b); - - for(Set<BaseButton*>::Element *E=buttons.front();E;E=E->next()) { - - BaseButton *bb=E->get(); - bb->set_pressed( b==bb ); - if (b==bb){ - emit_signal("button_selected", b); - } - } -} - -Array ButtonGroup::_get_button_list() const { - - List<BaseButton*> b; - get_button_list(&b); - - b.sort_custom<Node::Comparator>(); - - Array arr; - arr.resize(b.size()); - - int idx=0; - - for(List<BaseButton*>::Element *E=b.front();E;E=E->next(),idx++) { - - arr[idx]=E->get(); - } - - return arr; -} - -void ButtonGroup::get_button_list(List<BaseButton*> *p_buttons) const { - - for(Set<BaseButton*>::Element *E=buttons.front();E;E=E->next()) { - - p_buttons->push_back(E->get()); - } -} - -BaseButton *ButtonGroup::get_pressed_button() const { - - for(Set<BaseButton*>::Element *E=buttons.front();E;E=E->next()) { - - if (E->get()->is_pressed()) - return E->get(); - } - - return NULL; -} - -BaseButton *ButtonGroup::get_focused_button() const{ - - for(Set<BaseButton*>::Element *E=buttons.front();E;E=E->next()) { - - if (E->get()->has_focus()) - return E->get(); - } - - return NULL; - -} - -int ButtonGroup::get_pressed_button_index() const { - //in tree order, this is bizarre - - ERR_FAIL_COND_V(!is_inside_tree(),0); - - BaseButton *pressed = get_pressed_button(); - if (!pressed) - return -1; - - List<BaseButton*> blist; - for(Set<BaseButton*>::Element *E=buttons.front();E;E=E->next()) { - - blist.push_back(E->get()); - - } - - blist.sort_custom<Node::Comparator>(); - - int idx=0; - for(List<BaseButton*>::Element *E=blist.front();E;E=E->next()) { - - if (E->get()==pressed) - return idx; - - idx++; - } - - return -1; -} - -void ButtonGroup::_bind_methods() { - - ClassDB::bind_method(D_METHOD("get_pressed_button"),&ButtonGroup::get_pressed_button); - ClassDB::bind_method(D_METHOD("get_pressed_button_index"),&ButtonGroup::get_pressed_button_index); - ClassDB::bind_method(D_METHOD("get_focused_button"),&ButtonGroup::get_focused_button); - ClassDB::bind_method(D_METHOD("get_button_list"),&ButtonGroup::_get_button_list); - ClassDB::bind_method(D_METHOD("_pressed"),&ButtonGroup::_pressed); - ClassDB::bind_method(D_METHOD("set_pressed_button","button"),&ButtonGroup::_pressed); - - ADD_SIGNAL( MethodInfo("button_selected",PropertyInfo(Variant::OBJECT,"button",PROPERTY_HINT_RESOURCE_TYPE,"BaseButton"))); -} - -ButtonGroup::ButtonGroup() : BoxContainer(true) -{ -} -#endif diff --git a/scene/gui/button_group.h b/scene/gui/button_group.h deleted file mode 100644 index 93c3aaaeb3..0000000000 --- a/scene/gui/button_group.h +++ /dev/null @@ -1,68 +0,0 @@ -/*************************************************************************/ -/* button_group.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef BUTTON_GROUP_H -#define BUTTON_GROUP_H - -#include "scene/gui/box_container.h" - -#if 0 -class BaseButton; - -class ButtonGroup : public BoxContainer { - - GDCLASS(ButtonGroup,BoxContainer); - - - Set<BaseButton*> buttons; - - - Array _get_button_list() const; - void _pressed(Object *p_button); - -protected: -friend class BaseButton; - - void _add_button(BaseButton *p_button); - void _remove_button(BaseButton *p_button); - - static void _bind_methods(); -public: - - void get_button_list(List<BaseButton*> *p_buttons) const; - BaseButton *get_pressed_button() const; - BaseButton *get_focused_button() const; - void set_pressed_button(BaseButton *p_button); - int get_pressed_button_index() const; - - ButtonGroup(); -}; - -#endif -#endif // BUTTON_GROUP_H diff --git a/scene/gui/center_container.cpp b/scene/gui/center_container.cpp index bdc811870d..8c9c9d8720 100644 --- a/scene/gui/center_container.cpp +++ b/scene/gui/center_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/center_container.h b/scene/gui/center_container.h index 30b526e893..4397539046 100644 --- a/scene/gui/center_container.h +++ b/scene/gui/center_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/check_box.cpp b/scene/gui/check_box.cpp index b61d516599..e2b10a948f 100644 --- a/scene/gui/check_box.cpp +++ b/scene/gui/check_box.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -29,7 +29,6 @@ /*************************************************************************/ #include "check_box.h" -#include "button_group.h" #include "servers/visual_server.h" void CheckBox::_notification(int p_what) { diff --git a/scene/gui/check_box.h b/scene/gui/check_box.h index ec8e097bae..4da06be8d1 100644 --- a/scene/gui/check_box.h +++ b/scene/gui/check_box.h @@ -1,9 +1,9 @@ /*************************************************************************/ -/* check_box.h */ +/* check_box.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/check_button.cpp b/scene/gui/check_button.cpp index 1c3d4df308..e68159e27f 100644 --- a/scene/gui/check_button.cpp +++ b/scene/gui/check_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/check_button.h b/scene/gui/check_button.h index 8634858cfe..af3b80fe04 100644 --- a/scene/gui/check_button.h +++ b/scene/gui/check_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 5257f9df35..704c00b1d6 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/color_picker.h b/scene/gui/color_picker.h index d35182e062..7de67a707c 100644 --- a/scene/gui/color_picker.h +++ b/scene/gui/color_picker.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/color_rect.cpp b/scene/gui/color_rect.cpp index 0641302b1c..6b5247648e 100644 --- a/scene/gui/color_rect.cpp +++ b/scene/gui/color_rect.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/color_rect.h b/scene/gui/color_rect.h index 65da3d9a7c..382648fddf 100644 --- a/scene/gui/color_rect.h +++ b/scene/gui/color_rect.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp index 4bbe15ed7e..ba5d92620b 100644 --- a/scene/gui/container.cpp +++ b/scene/gui/container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/container.h b/scene/gui/container.h index bff24c6d55..60a7a9efcb 100644 --- a/scene/gui/container.h +++ b/scene/gui/container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 36fc9a6b3a..7bf11e6712 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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; @@ -1249,6 +1249,10 @@ void Control::_size_changed() { new_size_cache.height = MAX(minimum_size.height, new_size_cache.height); } + if (get_viewport()->is_snap_controls_to_pixels_enabled()) { + new_size_cache =new_size_cache.floor(); + new_pos_cache = new_pos_cache.floor(); + } bool pos_changed = new_pos_cache != data.pos_cache; bool size_changed = new_size_cache != data.size_cache; @@ -1687,7 +1691,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 +1702,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 +1725,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 +1743,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 +1778,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 +1802,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 +1812,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 +1824,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 +1914,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 +1957,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 +2040,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 +2097,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 +2117,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 +2170,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 +2365,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; @@ -2705,7 +2707,7 @@ void Control::_bind_methods() { ADD_SIGNAL(MethodInfo("minimum_size_changed")); ADD_SIGNAL(MethodInfo("modal_closed")); - BIND_VMETHOD(MethodInfo("has_point:bool", PropertyInfo(Variant::VECTOR2, "point"))); + BIND_VMETHOD(MethodInfo(Variant::BOOL, "has_point", PropertyInfo(Variant::VECTOR2, "point"))); } Control::Control() { diff --git a/scene/gui/control.h b/scene/gui/control.h index d73ca3f7c9..da5c4d0908 100644 --- a/scene/gui/control.h +++ b/scene/gui/control.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -33,7 +33,7 @@ #include "math_2d.h" #include "rid.h" #include "scene/2d/canvas_item.h" -#include "scene/gui/input_action.h" +#include "scene/gui/shortcut.h" #include "scene/main/node.h" #include "scene/main/timer.h" #include "scene/resources/theme.h" diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index b911a18312..140d002387 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/dialogs.h b/scene/gui/dialogs.h index 9d8f113caa..54cc290b05 100644 --- a/scene/gui/dialogs.h +++ b/scene/gui/dialogs.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index 0b898c4d2e..990c0f3d96 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/file_dialog.h b/scene/gui/file_dialog.h index 9873a677b2..34cecfe4d0 100644 --- a/scene/gui/file_dialog.h +++ b/scene/gui/file_dialog.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/gradient_edit.cpp b/scene/gui/gradient_edit.cpp index 22de28ea7f..c9ce5e2143 100644 --- a/scene/gui/gradient_edit.cpp +++ b/scene/gui/gradient_edit.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/gradient_edit.h b/scene/gui/gradient_edit.h index 6c4ae6fd15..026e4f783b 100644 --- a/scene/gui/gradient_edit.h +++ b/scene/gui/gradient_edit.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index ec1932ed5a..5b00aab2ef 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "graph_edit.h" + #include "os/input.h" #include "os/keyboard.h" #include "scene/gui/box_container.h" @@ -134,7 +135,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 +164,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 +206,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 +215,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 +229,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 +241,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 +257,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 +346,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 +380,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 +396,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 +444,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 +494,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; @@ -593,8 +594,6 @@ void GraphEdit::_bake_segment2d(Vector<Vector2> &points, Vector<Color> &colors, void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, const Color &p_to_color) { -#if 1 - //cubic bezier code float diff = p_to.x - p_from.x; float cp_offset; @@ -621,84 +620,53 @@ void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const colors.push_back(p_to_color); p_where->draw_polyline_colors(points, colors, 2, true); - -#else - - static const int steps = 20; - - //old cosine code - Rect2 r; - r.pos = p_from; - r.expand_to(p_to); - Vector2 sign = Vector2((p_from.x < p_to.x) ? 1 : -1, (p_from.y < p_to.y) ? 1 : -1); - bool flip = sign.x * sign.y < 0; - - Vector2 prev; - for (int i = 0; i <= steps; i++) { - - float d = i / float(steps); - float c = -Math::cos(d * Math_PI) * 0.5 + 0.5; - if (flip) - c = 1.0 - c; - Vector2 p = r.pos + Vector2(d * r.size.width, c * r.size.height); - - if (i > 0) { - - p_where->draw_line(prev, p, p_color.linear_interpolate(p_to_color, d), 2); - } - - prev = p; - } -#endif } void GraphEdit::_connections_layer_draw() { - { - //draw connections - List<List<Connection>::Element *> to_erase; - for (List<Connection>::Element *E = connections.front(); E; E = E->next()) { - - NodePath fromnp(E->get().from); + //draw connections + List<List<Connection>::Element *> to_erase; + for (List<Connection>::Element *E = connections.front(); E; E = E->next()) { - Node *from = get_node(fromnp); - if (!from) { - to_erase.push_back(E); - continue; - } + NodePath fromnp(E->get().from); - GraphNode *gfrom = from->cast_to<GraphNode>(); + Node *from = get_node(fromnp); + if (!from) { + to_erase.push_back(E); + continue; + } - if (!gfrom) { - to_erase.push_back(E); - continue; - } + GraphNode *gfrom = Object::cast_to<GraphNode>(from); - NodePath tonp(E->get().to); - Node *to = get_node(tonp); - if (!to) { - to_erase.push_back(E); - continue; - } + if (!gfrom) { + to_erase.push_back(E); + continue; + } - GraphNode *gto = to->cast_to<GraphNode>(); + NodePath tonp(E->get().to); + Node *to = get_node(tonp); + if (!to) { + to_erase.push_back(E); + continue; + } - if (!gto) { - to_erase.push_back(E); - continue; - } + GraphNode *gto = Object::cast_to<GraphNode>(to); - Vector2 frompos = gfrom->get_connection_output_pos(E->get().from_port) + gfrom->get_offset() * zoom; - Color color = gfrom->get_connection_output_color(E->get().from_port); - Vector2 topos = gto->get_connection_input_pos(E->get().to_port) + gto->get_offset() * zoom; - Color tocolor = gto->get_connection_input_color(E->get().to_port); - _draw_cos_line(connections_layer, frompos, topos, color, tocolor); + if (!gto) { + to_erase.push_back(E); + continue; } - while (to_erase.size()) { - connections.erase(to_erase.front()->get()); - to_erase.pop_front(); - } + Vector2 frompos = gfrom->get_connection_output_pos(E->get().from_port) + gfrom->get_offset() * zoom; + Color color = gfrom->get_connection_output_color(E->get().from_port); + Vector2 topos = gto->get_connection_input_pos(E->get().to_port) + gto->get_offset() * zoom; + Color tocolor = gto->get_connection_input_color(E->get().to_port); + _draw_cos_line(connections_layer, frompos, topos, color, tocolor); + } + + while (to_erase.size()) { + connections.erase(to_erase.front()->get()); + to_erase.pop_front(); } } @@ -710,7 +678,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 +712,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 +735,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 +759,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 +784,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 +805,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 +821,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 +842,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 +866,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 +874,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 +894,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 +905,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 +916,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_edit.h b/scene/gui/graph_edit.h index e908829d5f..4656b50133 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 4b4ecc5e98..bef0808fd0 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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()) @@ -270,7 +270,7 @@ void GraphNode::_notification(int p_what) { } } - if (resizeable) { + if (resizable) { draw_texture(resizer, get_size() - resizer->get_size()); } } @@ -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()) @@ -594,7 +594,7 @@ void GraphNode::_gui_input(const Ref<InputEvent> &p_ev) { Ref<Texture> resizer = get_icon("resizer"); - if (resizeable && mpos.x > get_size().x - resizer->get_width() && mpos.y > get_size().y - resizer->get_height()) { + if (resizable && mpos.x > get_size().x - resizer->get_width() && mpos.y > get_size().y - resizer->get_height()) { resizing = true; resizing_from = mpos; @@ -645,15 +645,15 @@ bool GraphNode::is_comment() const { return comment; } -void GraphNode::set_resizeable(bool p_enable) { +void GraphNode::set_resizable(bool p_enable) { - resizeable = p_enable; + resizable = p_enable; update(); } -bool GraphNode::is_resizeable() const { +bool GraphNode::is_resizable() const { - return resizeable; + return resizable; } void GraphNode::_bind_methods() { @@ -678,8 +678,8 @@ void GraphNode::_bind_methods() { ClassDB::bind_method(D_METHOD("set_comment", "comment"), &GraphNode::set_comment); ClassDB::bind_method(D_METHOD("is_comment"), &GraphNode::is_comment); - ClassDB::bind_method(D_METHOD("set_resizeable", "resizeable"), &GraphNode::set_resizeable); - ClassDB::bind_method(D_METHOD("is_resizeable"), &GraphNode::is_resizeable); + ClassDB::bind_method(D_METHOD("set_resizable", "resizable"), &GraphNode::set_resizable); + ClassDB::bind_method(D_METHOD("is_resizable"), &GraphNode::is_resizable); ClassDB::bind_method(D_METHOD("set_selected", "selected"), &GraphNode::set_selected); ClassDB::bind_method(D_METHOD("is_selected"), &GraphNode::is_selected); @@ -702,7 +702,7 @@ void GraphNode::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::STRING, "title"), "set_title", "get_title"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_close"), "set_show_close_button", "is_close_button_visible"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "resizeable"), "set_resizeable", "is_resizeable"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "resizable"), "set_resizable", "is_resizable"); ADD_SIGNAL(MethodInfo("offset_changed")); ADD_SIGNAL(MethodInfo("dragged", PropertyInfo(Variant::VECTOR2, "from"), PropertyInfo(Variant::VECTOR2, "to"))); @@ -722,7 +722,7 @@ GraphNode::GraphNode() { connpos_dirty = true; set_mouse_filter(MOUSE_FILTER_STOP); comment = false; - resizeable = false; + resizable = false; resizing = false; selected = false; } diff --git a/scene/gui/graph_node.h b/scene/gui/graph_node.h index a7d9e8ddb0..a606e47acd 100644 --- a/scene/gui/graph_node.h +++ b/scene/gui/graph_node.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -68,7 +68,7 @@ private: bool show_close; Vector2 offset; bool comment; - bool resizeable; + bool resizable; bool resizing; Vector2 resizing_from; @@ -151,8 +151,8 @@ public: void set_comment(bool p_enable); bool is_comment() const; - void set_resizeable(bool p_enable); - bool is_resizeable() const; + void set_resizable(bool p_enable); + bool is_resizable() const; virtual Size2 get_minimum_size() const; diff --git a/scene/gui/grid_container.cpp b/scene/gui/grid_container.cpp index 06a58d69b2..5dd5667f46 100644 --- a/scene/gui/grid_container.cpp +++ b/scene/gui/grid_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/grid_container.h b/scene/gui/grid_container.h index aaa6a295ff..45e26ed48e 100644 --- a/scene/gui/grid_container.h +++ b/scene/gui/grid_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index c7889a6cf2..9a605c98f3 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -151,6 +151,20 @@ Color ItemList::get_item_custom_bg_color(int p_idx) const { return items[p_idx].custom_bg; } +void ItemList::set_item_custom_fg_color(int p_idx, const Color &p_custom_fg_color) { + + ERR_FAIL_INDEX(p_idx, items.size()); + + items[p_idx].custom_fg = p_custom_fg_color; +} + +Color ItemList::get_item_custom_fg_color(int p_idx) const { + + ERR_FAIL_INDEX_V(p_idx, items.size(), Color()); + + return items[p_idx].custom_fg; +} + void ItemList::set_item_tag_icon(int p_idx, const Ref<Texture> &p_tag_icon) { ERR_FAIL_INDEX(p_idx, items.size()); @@ -534,7 +548,7 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) { uint64_t now = OS::get_singleton()->get_ticks_msec(); uint64_t diff = now - search_time_msec; - if (diff < int(ProjectSettings::get_singleton()->get("gui/timers/incremental_search_max_interval_msec")) * 2) { + if (diff < uint64_t(ProjectSettings::get_singleton()->get("gui/timers/incremental_search_max_interval_msec")) * 2) { for (int i = current - 1; i >= 0; i--) { @@ -569,7 +583,7 @@ void ItemList::_gui_input(const Ref<InputEvent> &p_event) { uint64_t now = OS::get_singleton()->get_ticks_msec(); uint64_t diff = now - search_time_msec; - if (diff < int(ProjectSettings::get_singleton()->get("gui/timers/incremental_search_max_interval_msec")) * 2) { + if (diff < uint64_t(ProjectSettings::get_singleton()->get("gui/timers/incremental_search_max_interval_msec")) * 2) { for (int i = current + 1; i < items.size(); i++) { @@ -1021,7 +1035,7 @@ void ItemList::_notification(int p_what) { else max_len = size.x; - Color modulate = items[i].selected ? font_color_selected : font_color; + Color modulate = items[i].selected ? font_color_selected : (items[i].custom_fg != Color() ? items[i].custom_fg : font_color); if (items[i].disabled) modulate.a *= 0.5; diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h index a80727f568..673b7d8956 100644 --- a/scene/gui/item_list.h +++ b/scene/gui/item_list.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -61,6 +61,7 @@ private: bool tooltip_enabled; Variant metadata; String tooltip; + Color custom_fg; Color custom_bg; Rect2 rect_cache; @@ -150,6 +151,9 @@ public: void set_item_custom_bg_color(int p_idx, const Color &p_custom_bg_color); Color get_item_custom_bg_color(int p_idx) const; + void set_item_custom_fg_color(int p_idx, const Color &p_custom_fg_color); + Color get_item_custom_fg_color(int p_idx) const; + void select(int p_idx, bool p_single = true); void unselect(int p_idx); bool is_selected(int p_idx) const; diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index cf7303cbe7..e1f77594da 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -85,7 +85,7 @@ void Label::_notification(int p_what) { Size2 string_size; Size2 size = get_size(); - + Ref<StyleBox> style = get_stylebox("normal"); Ref<Font> font = get_font("font"); Color font_color = get_color("font_color"); Color font_color_shadow = get_color("font_color_shadow"); @@ -93,6 +93,8 @@ void Label::_notification(int p_what) { Point2 shadow_ofs(get_constant("shadow_offset_x"), get_constant("shadow_offset_y")); int line_spacing = get_constant("line_spacing"); + style->draw(ci, Rect2(Point2(0, 0), get_size())); + VisualServer::get_singleton()->canvas_item_set_distance_field_mode(get_canvas_item(), font.is_valid() && font->is_distance_field_hint()); int font_h = font->get_height() + line_spacing; @@ -193,21 +195,20 @@ void Label::_notification(int p_what) { case ALIGN_FILL: case ALIGN_LEFT: { - x_ofs = 0; + x_ofs = style->get_offset().x; } break; case ALIGN_CENTER: { x_ofs = int(size.width - (taken + spaces * space_w)) / 2; - } break; case ALIGN_RIGHT: { - x_ofs = int(size.width - (taken + spaces * space_w)); - + x_ofs = int(size.width - style->get_margin(MARGIN_RIGHT) - (taken + spaces * space_w)); } break; } - int y_ofs = (line - lines_skipped) * font_h + font->get_ascent(); + int y_ofs = style->get_offset().y; + y_ofs += (line - lines_skipped) * font_h + font->get_ascent(); y_ofs += vbegin + line * vsep; while (from != to) { @@ -288,8 +289,10 @@ void Label::_notification(int p_what) { Size2 Label::get_minimum_size() const { + Size2 min_style = get_stylebox("normal")->get_minimum_size(); + if (autowrap) - return Size2(1, clip ? 1 : minsize.height); + return Size2(1, clip ? 1 : minsize.height) + min_style; else { // don't want to mutable everything @@ -299,7 +302,7 @@ Size2 Label::get_minimum_size() const { Size2 ms = minsize; if (clip) ms.width = 1; - return ms; + return ms + min_style; } } @@ -350,7 +353,7 @@ int Label::get_visible_line_count() const { int line_spacing = get_constant("line_spacing"); int font_h = get_font("font")->get_height() + line_spacing; - int lines_visible = (get_size().y + line_spacing) / font_h; + int lines_visible = (get_size().height - get_stylebox("normal")->get_minimum_size().height + line_spacing) / font_h; if (lines_visible > line_count) lines_visible = line_count; @@ -370,7 +373,8 @@ void Label::regenerate_word_cache() { memdelete(current); } - int width = autowrap ? get_size().width : get_longest_line_width(); + Ref<StyleBox> style = get_stylebox("normal"); + int width = autowrap ? (get_size().width - style->get_minimum_size().width) : get_longest_line_width(); Ref<Font> font = get_font("font"); int current_word_size = 0; @@ -397,7 +401,7 @@ void Label::regenerate_word_cache() { bool separatable = (current >= 0x2E08 && current <= 0xFAFF) || (current >= 0xFE30 && current <= 0xFE4F); //current>=33 && (current < 65||current >90) && (current<97||current>122) && (current<48||current>57); bool insert_newline = false; - int char_width; + int char_width = 0; if (current < 33) { diff --git a/scene/gui/label.h b/scene/gui/label.h index dce68f4422..7c1905af7d 100644 --- a/scene/gui/label.h +++ b/scene/gui/label.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index c5360b0df0..6a5f56c78c 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -631,7 +631,7 @@ void LineEdit::_notification(int p_what) { if (has_icon("right_icon")) { Ref<Texture> r_icon = Control::get_icon("right_icon"); ofs_max -= r_icon->get_width(); - r_icon->draw(ci, Point2(width - r_icon->get_width() - x_ofs, y_ofs), Color(1, 1, 1, disabled_alpha * .9)); + r_icon->draw(ci, Point2(width - r_icon->get_width() - x_ofs, height / 2 - r_icon->get_height() / 2), Color(1, 1, 1, disabled_alpha * .9)); } int caret_height = font->get_height() > y_area ? y_area : font->get_height(); diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 7d04e4618b..52a4a29a33 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/link_button.cpp b/scene/gui/link_button.cpp index 632e9ec4fc..9fe94fc464 100644 --- a/scene/gui/link_button.cpp +++ b/scene/gui/link_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/link_button.h b/scene/gui/link_button.h index 98a3dc66f6..386eb452ae 100644 --- a/scene/gui/link_button.h +++ b/scene/gui/link_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/margin_container.cpp b/scene/gui/margin_container.cpp index 2bc9db529b..14991f5d44 100644 --- a/scene/gui/margin_container.cpp +++ b/scene/gui/margin_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/margin_container.h b/scene/gui/margin_container.h index 1cdb3a36cc..9703d9ebe0 100644 --- a/scene/gui/margin_container.h +++ b/scene/gui/margin_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp index 93284f2b6c..ac450616d6 100644 --- a/scene/gui/menu_button.cpp +++ b/scene/gui/menu_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/menu_button.h b/scene/gui/menu_button.h index 6bb23452dd..c7f1d976ff 100644 --- a/scene/gui/menu_button.h +++ b/scene/gui/menu_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp index 00df266a09..b4d0799945 100644 --- a/scene/gui/option_button.cpp +++ b/scene/gui/option_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/option_button.h b/scene/gui/option_button.h index db921b8b97..a06c540678 100644 --- a/scene/gui/option_button.h +++ b/scene/gui/option_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/panel.cpp b/scene/gui/panel.cpp index f3c6142f9e..536b655f75 100644 --- a/scene/gui/panel.cpp +++ b/scene/gui/panel.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/panel.h b/scene/gui/panel.h index eac8f2d4e8..cc7ca47319 100644 --- a/scene/gui/panel.h +++ b/scene/gui/panel.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/panel_container.cpp b/scene/gui/panel_container.cpp index 86874f7cfd..a0c75d1330 100644 --- a/scene/gui/panel_container.cpp +++ b/scene/gui/panel_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/panel_container.h b/scene/gui/panel_container.h index f8f1fb6494..5d8f1ee64b 100644 --- a/scene/gui/panel_container.h +++ b/scene/gui/panel_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/patch_9_rect.cpp b/scene/gui/patch_9_rect.cpp index 71cbef495c..92c34dd3f9 100644 --- a/scene/gui/patch_9_rect.cpp +++ b/scene/gui/patch_9_rect.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -61,7 +61,7 @@ void NinePatchRect::_bind_methods() { ClassDB::bind_method(D_METHOD("set_region_rect", "rect"), &NinePatchRect::set_region_rect); ClassDB::bind_method(D_METHOD("get_region_rect"), &NinePatchRect::get_region_rect); ClassDB::bind_method(D_METHOD("set_draw_center", "draw_center"), &NinePatchRect::set_draw_center); - ClassDB::bind_method(D_METHOD("get_draw_center"), &NinePatchRect::get_draw_center); + ClassDB::bind_method(D_METHOD("is_draw_center_enabled"), &NinePatchRect::is_draw_center_enabled); ClassDB::bind_method(D_METHOD("set_h_axis_stretch_mode", "mode"), &NinePatchRect::set_h_axis_stretch_mode); ClassDB::bind_method(D_METHOD("get_h_axis_stretch_mode"), &NinePatchRect::get_h_axis_stretch_mode); ClassDB::bind_method(D_METHOD("set_v_axis_stretch_mode", "mode"), &NinePatchRect::set_v_axis_stretch_mode); @@ -70,7 +70,7 @@ void NinePatchRect::_bind_methods() { ADD_SIGNAL(MethodInfo("texture_changed")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); - ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "get_draw_center"); + ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "is_draw_center_enabled"); ADD_PROPERTYNZ(PropertyInfo(Variant::RECT2, "region_rect"), "set_region_rect", "get_region_rect"); ADD_GROUP("Patch Margin", "patch_margin_"); @@ -151,13 +151,13 @@ Rect2 NinePatchRect::get_region_rect() const { return region_rect; } -void NinePatchRect::set_draw_center(bool p_draw) { +void NinePatchRect::set_draw_center(bool p_enabled) { - draw_center = p_draw; + draw_center = p_enabled; update(); } -bool NinePatchRect::get_draw_center() const { +bool NinePatchRect::is_draw_center_enabled() const { return draw_center; } diff --git a/scene/gui/patch_9_rect.h b/scene/gui/patch_9_rect.h index 636b9127e7..808b7a1f5d 100644 --- a/scene/gui/patch_9_rect.h +++ b/scene/gui/patch_9_rect.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -67,8 +67,8 @@ public: void set_region_rect(const Rect2 &p_region_rect); Rect2 get_region_rect() const; - void set_draw_center(bool p_draw); - bool get_draw_center() const; + void set_draw_center(bool p_enabled); + bool is_draw_center_enabled() const; void set_h_axis_stretch_mode(AxisStretchMode p_mode); AxisStretchMode get_h_axis_stretch_mode() const; diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp index 4725300a5f..5a2a552943 100644 --- a/scene/gui/popup.cpp +++ b/scene/gui/popup.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -59,17 +59,10 @@ void Popup::_notification(int p_what) { void Popup::_fix_size() { -#if 0 - Point2 pos = get_position(); - Size2 size = get_size(); - Point2 window_size = window==this ? get_parent_area_size() :window->get_size(); -#else - Point2 pos = get_global_position(); Size2 size = get_size(); Point2 window_size = get_viewport_rect().size; -#endif if (pos.x + size.width > window_size.width) pos.x = window_size.width - size.width; if (pos.x < 0) @@ -79,14 +72,8 @@ void Popup::_fix_size() { pos.y = window_size.height - size.height; if (pos.y < 0) pos.y = 0; -#if 0 - if (pos!=get_pos()) - set_position(pos); -#else if (pos != get_position()) set_global_position(pos); - -#endif } void Popup::set_as_minsize() { @@ -95,7 +82,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 +116,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.h b/scene/gui/popup.h index 0543ae1937..6739c580f2 100644 --- a/scene/gui/popup.h +++ b/scene/gui/popup.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 1ba936c4e9..f3711b86b6 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/popup_menu.h b/scene/gui/popup_menu.h index 37714ee989..c9e9c8e311 100644 --- a/scene/gui/popup_menu.h +++ b/scene/gui/popup_menu.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/progress_bar.cpp b/scene/gui/progress_bar.cpp index 13d368d253..6953d03384 100644 --- a/scene/gui/progress_bar.cpp +++ b/scene/gui/progress_bar.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/progress_bar.h b/scene/gui/progress_bar.h index 1121a78aab..c5a9252123 100644 --- a/scene/gui/progress_bar.h +++ b/scene/gui/progress_bar.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp index 68afe8150a..1dbec6e5a1 100644 --- a/scene/gui/range.cpp +++ b/scene/gui/range.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/range.h b/scene/gui/range.h index fdcbbb09ee..daa8af824a 100644 --- a/scene/gui/range.h +++ b/scene/gui/range.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/reference_rect.cpp b/scene/gui/reference_rect.cpp index 441c3e721b..e2f4abe04a 100644 --- a/scene/gui/reference_rect.cpp +++ b/scene/gui/reference_rect.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/reference_rect.h b/scene/gui/reference_rect.h index b118425eb6..9b826a1145 100644 --- a/scene/gui/reference_rect.h +++ b/scene/gui/reference_rect.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index f0efbdc517..ab2c2f445f 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -80,6 +80,10 @@ RichTextLabel::Item *RichTextLabel::_get_next_item(Item *p_item, bool p_free) { return NULL; } +Rect2 RichTextLabel::_get_text_rect() { + Ref<StyleBox> style = get_stylebox("normal"); + return Rect2(style->get_offset(), get_size() - style->get_minimum_size()); +} void RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &y, int p_width, int p_line, ProcessMode p_mode, const Ref<Font> &p_base_font, const Color &p_base_color, const Point2i &p_click_pos, Item **r_click_item, int *r_click_char, bool *r_outside, int p_char_count) { RID ci; @@ -583,7 +587,7 @@ void RichTextLabel::_update_scroll() { int total_height = 0; if (main->lines.size()) - total_height = main->lines[main->lines.size() - 1].height_accum_cache; + total_height = main->lines[main->lines.size() - 1].height_accum_cache + get_stylebox("normal")->get_minimum_size().height; bool exceeds = total_height > get_size().height && scroll_active; @@ -641,7 +645,11 @@ void RichTextLabel::_notification(int p_what) { _update_scroll(); RID ci = get_canvas_item(); + Size2 size = get_size(); + Rect2 text_rect = _get_text_rect(); + + draw_style_box(get_stylebox("normal"), Rect2(Point2(), size)); if (has_focus()) { VisualServer::get_singleton()->canvas_item_add_clip_ignore(ci, true); @@ -657,10 +665,10 @@ void RichTextLabel::_notification(int p_what) { int total_chars = 0; while (from_line < main->lines.size()) { - if (main->lines[from_line].height_accum_cache >= ofs) + if (main->lines[from_line].height_accum_cache + _get_text_rect().get_position().y >= ofs) break; - from_line++; total_chars += main->lines[from_line].char_count; + from_line++; } if (from_line >= main->lines.size()) @@ -672,7 +680,7 @@ void RichTextLabel::_notification(int p_what) { while (y < size.height && from_line < main->lines.size()) { - _process_line(main, Point2(), y, size.width - scroll_w, from_line, PROCESS_DRAW, base_font, base_color, Point2i(), NULL, NULL, NULL, total_chars); + _process_line(main, text_rect.get_position(), y, text_rect.get_size().width - scroll_w, from_line, PROCESS_DRAW, base_font, base_color, Point2i(), NULL, NULL, NULL, total_chars); total_chars += main->lines[from_line].char_count; from_line++; } @@ -686,7 +694,7 @@ void RichTextLabel::_find_click(ItemFrame *p_frame, const Point2i &p_click, Item *r_click_item = NULL; Size2 size = get_size(); - + Rect2 text_rect = _get_text_rect(); int ofs = vscroll->get_value(); //todo, change to binary search @@ -706,9 +714,9 @@ void RichTextLabel::_find_click(ItemFrame *p_frame, const Point2i &p_click, Item Ref<Font> base_font = get_font("normal_font"); Color base_color = get_color("default_color"); - while (y < size.height && from_line < p_frame->lines.size()) { + while (y < text_rect.get_size().height && from_line < p_frame->lines.size()) { - _process_line(p_frame, Point2(), y, size.width - scroll_w, from_line, PROCESS_POINTER, base_font, base_color, p_click, r_click_item, r_click_char, r_outside); + _process_line(p_frame, text_rect.get_position(), y, text_rect.get_size().width - scroll_w, from_line, PROCESS_POINTER, base_font, base_color, p_click, r_click_item, r_click_char, r_outside); if (r_click_item && *r_click_item) return; from_line++; @@ -791,7 +799,7 @@ void RichTextLabel::_gui_input(Ref<InputEvent> p_event) { Ref<InputEventKey> k = p_event; if (k.is_valid()) { - if (k->is_pressed() && !k->get_alt() && !k->get_shift() && !k->get_metakey()) { + if (k->is_pressed() && !k->get_alt() && !k->get_shift()) { bool handled = true; switch (k->get_scancode()) { case KEY_PAGEUP: { @@ -1015,13 +1023,14 @@ void RichTextLabel::_validate_line_caches(ItemFrame *p_frame) { //validate invalid lines!s Size2 size = get_size(); + Rect2 text_rect = _get_text_rect(); Ref<Font> base_font = get_font("normal_font"); for (int i = p_frame->first_invalid_line; i < p_frame->lines.size(); i++) { int y = 0; - _process_line(p_frame, Point2(), y, size.width - scroll_w, i, PROCESS_CACHE, base_font, Color()); + _process_line(p_frame, text_rect.get_position(), y, text_rect.get_size().width - scroll_w, i, PROCESS_CACHE, base_font, Color()); p_frame->lines[i].height_cache = y; p_frame->lines[i].height_accum_cache = y; @@ -1031,7 +1040,7 @@ void RichTextLabel::_validate_line_caches(ItemFrame *p_frame) { int total_height = 0; if (p_frame->lines.size()) - total_height = p_frame->lines[p_frame->lines.size() - 1].height_accum_cache; + total_height = p_frame->lines[p_frame->lines.size() - 1].height_accum_cache + get_stylebox("normal")->get_minimum_size().height; main->first_invalid_line = p_frame->lines.size(); diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 71fa766958..4db2c3a8e9 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -276,6 +276,8 @@ private: void _gui_input(Ref<InputEvent> p_event); Item *_get_next_item(Item *p_item, bool p_free = false); + Rect2 _get_text_rect(); + bool use_bbcode; String bbcode; diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp index 4242ee4523..16d1b320b7 100644 --- a/scene/gui/scroll_bar.cpp +++ b/scene/gui/scroll_bar.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,9 +28,11 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "scroll_bar.h" + #include "os/keyboard.h" #include "os/os.h" #include "print_string.h" + bool ScrollBar::focus_by_default = false; void ScrollBar::set_can_focus_by_default(bool p_can_focus) { @@ -315,7 +317,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 +665,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) { @@ -686,138 +688,6 @@ bool ScrollBar::is_smooth_scroll_enabled() const { return smooth_scroll_enabled; } -#if 0 - -void ScrollBar::mouse_button(const Point2& p_pos, int b->get_button_index(),bool b->is_pressed(),int p_modifier_mask) { - - // wheel! - - if (b->get_button_index()==BUTTON_WHEEL_UP && b->is_pressed()) { - - if (orientation==VERTICAL) - set_val( get_val() - get_page() / 4.0 ); - else - set_val( get_val() + get_page() / 4.0 ); - - } - if (b->get_button_index()==BUTTON_WHEEL_DOWN && b->is_pressed()) { - - if (orientation==HORIZONTAL) - set_val( get_val() - get_page() / 4.0 ); - else - set_val( get_val() + get_page() / 4.0 ); - } - - if (b->get_button_index()!=BUTTON_LEFT) - return; - - if (b->is_pressed()) { - - int ofs = orientation==VERTICAL ? p_pos.y : p_pos.x ; - int grabber_ofs = get_grabber_offset(); - int grabber_size = get_grabber_size(); - - if ( ofs < grabber_ofs ) { - - set_val( get_val() - get_page() ); - - } else if (ofs > grabber_ofs + grabber_size ) { - - set_val( get_val() + get_page() ); - - } else { - - - drag.active=true; - drag.pos_at_click=get_click_pos(p_pos); - drag.value_at_click=get_unit_value(); - } - - - } else { - - drag.active=false; - } - -} -void ScrollBar::mouse_motion(const Point2& p_pos, const Point2& p_rel, int b->get_button_index()_mask) { - - if (!drag.active) - return; - - double value_ofs=drag.value_at_click+(get_click_pos(p_pos)-drag.pos_at_click); - - - value_ofs=value_ofs*( get_max() - get_min() ); - if (value_ofs<get_min()) - value_ofs=get_min(); - if (value_ofs>(get_max()-get_page())) - value_ofs=get_max()-get_page(); - if (get_val()==value_ofs) - return; //don't bother if the value is the same - - set_val( value_ofs ); - -} - -bool ScrollBar::key(unsigned long p_unicode, unsigned long p_scan_code,bool b->is_pressed(),bool p_repeat,int p_modifier_mask) { - - if (!b->is_pressed()) - return false; - - switch (p_scan_code) { - - case KEY_LEFT: { - - if (orientation!=HORIZONTAL) - return false; - set_val( get_val() - get_step() ); - - } break; - case KEY_RIGHT: { - - if (orientation!=HORIZONTAL) - return false; - set_val( get_val() + get_step() ); - - } break; - case KEY_UP: { - - if (orientation!=VERTICAL) - return false; - - set_val( get_val() - get_step() ); - - - } break; - case KEY_DOWN: { - - if (orientation!=VERTICAL) - return false; - set_val( get_val() + get_step() ); - - } break; - case KEY_HOME: { - - set_val( get_min() ); - - } break; - case KEY_END: { - - set_val( get_max() ); - - } break; - - default: - return false; - - } - - return true; -} - -#endif - void ScrollBar::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &ScrollBar::_gui_input); diff --git a/scene/gui/scroll_bar.h b/scene/gui/scroll_bar.h index e22d4da46d..373483a8a0 100644 --- a/scene/gui/scroll_bar.h +++ b/scene/gui/scroll_bar.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp index 939bdd8d0c..e182e491d3 100644 --- a/scene/gui/scroll_container.cpp +++ b/scene/gui/scroll_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/scroll_container.h b/scene/gui/scroll_container.h index e5df3e5e1c..9076be0d72 100644 --- a/scene/gui/scroll_container.h +++ b/scene/gui/scroll_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/separator.cpp b/scene/gui/separator.cpp index 3b00ab4605..3db234f7cc 100644 --- a/scene/gui/separator.cpp +++ b/scene/gui/separator.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/separator.h b/scene/gui/separator.h index 9a5fe2ac66..be2f1e8e77 100644 --- a/scene/gui/separator.h +++ b/scene/gui/separator.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/input_action.cpp b/scene/gui/shortcut.cpp index c08059a049..f37410e77b 100644 --- a/scene/gui/input_action.cpp +++ b/scene/gui/shortcut.cpp @@ -1,9 +1,9 @@ /*************************************************************************/ -/* input_action.cpp */ +/* shortcut.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -27,7 +27,8 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "input_action.h" +#include "shortcut.h" + #include "os/keyboard.h" void ShortCut::set_shortcut(const Ref<InputEvent> &p_shortcut) { @@ -52,61 +53,6 @@ String ShortCut::get_as_text() const { return shortcut->as_text(); else return "None"; -#if 0 - switch (shortcut.type) { - - case Ref<InputEvent>::NONE: { - - return "None"; - } break; - case Ref<InputEvent>::KEY: { - - String str; - if (shortcut->get_shift()) - str += RTR("Shift+"); - if (shortcut->get_alt()) - str += RTR("Alt+"); - if (shortcut->get_control()) - str += RTR("Ctrl+"); - if (shortcut->get_metakey()) - str += RTR("Meta+"); - - str += keycode_get_string(shortcut->get_scancode()).capitalize(); - - return str; - } break; - case Ref<InputEvent>::JOYPAD_BUTTON: { - - String str = RTR("Device") + " " + itos(shortcut.device) + ", " + RTR("Button") + " " + itos(shortcut.joy_button->get_button_index()); - str += "."; - - return str; - } break; - case Ref<InputEvent>::MOUSE_BUTTON: { - - String str = RTR("Device") + " " + itos(shortcut.device) + ", "; - switch (shortcut->get_button_index()) { - case BUTTON_LEFT: str += RTR("Left Button."); break; - case BUTTON_RIGHT: str += RTR("Right Button."); break; - case BUTTON_MIDDLE: str += RTR("Middle Button."); break; - case BUTTON_WHEEL_UP: str += RTR("Wheel Up."); break; - case BUTTON_WHEEL_DOWN: str += RTR("Wheel Down."); break; - default: str += RTR("Button") + " " + itos(shortcut->get_button_index()) + "."; - } - - return str; - } break; - case Ref<InputEvent>::JOYPAD_MOTION: { - - int ax = shortcut.joy_motion.axis; - String str = RTR("Device") + " " + itos(shortcut.device) + ", " + RTR("Axis") + " " + itos(ax) + "."; - - return str; - } break; - } - - return ""; -#endif } bool ShortCut::is_valid() const { diff --git a/scene/gui/input_action.h b/scene/gui/shortcut.h index 5c91d2be28..8d85bb920f 100644 --- a/scene/gui/input_action.h +++ b/scene/gui/shortcut.h @@ -1,9 +1,9 @@ /*************************************************************************/ -/* input_action.h */ +/* shortcut.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -27,8 +27,8 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef INPUTACTION_H -#define INPUTACTION_H +#ifndef SHORTCUT_H +#define SHORTCUT_H #include "os/input_event.h" #include "resource.h" @@ -53,4 +53,4 @@ public: ShortCut(); }; -#endif // INPUTACTION_H +#endif // SHORTCUT_H diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp index 9ba17ce34f..4661f54526 100644 --- a/scene/gui/slider.cpp +++ b/scene/gui/slider.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/slider.h b/scene/gui/slider.h index f3cf3c6f48..a2334a69fc 100644 --- a/scene/gui/slider.h +++ b/scene/gui/slider.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 751edc5a43..f462989f53 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/spin_box.h b/scene/gui/spin_box.h index 683ed0c344..0c562bd744 100644 --- a/scene/gui/spin_box.h +++ b/scene/gui/spin_box.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/split_container.cpp b/scene/gui/split_container.cpp index 5fc3db4672..4420a936d2 100644 --- a/scene/gui/split_container.cpp +++ b/scene/gui/split_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/split_container.h b/scene/gui/split_container.h index 87a210f24c..8ec21b5eaa 100644 --- a/scene/gui/split_container.h +++ b/scene/gui/split_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index d32b899de7..461ae3444b 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/tab_container.h b/scene/gui/tab_container.h index 3e1a2c1598..be59a16b3f 100644 --- a/scene/gui/tab_container.h +++ b/scene/gui/tab_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/tabs.cpp b/scene/gui/tabs.cpp index b0dc88bbb4..085f6de6b8 100644 --- a/scene/gui/tabs.cpp +++ b/scene/gui/tabs.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/tabs.h b/scene/gui/tabs.h index 86ad128dcd..73fa40bbb8 100644 --- a/scene/gui/tabs.h +++ b/scene/gui/tabs.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 245e7e04be..1738e303aa 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -27,13 +27,12 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ - #include "text_edit.h" + +#include "message_queue.h" #include "os/input.h" #include "os/keyboard.h" #include "os/os.h" - -#include "message_queue.h" #include "project_settings.h" #include "scene/main/viewport.h" @@ -215,8 +214,8 @@ void TextEdit::Text::_update_line_cache(int p_line) const { const Map<int, TextEdit::Text::ColorRegionInfo> &TextEdit::Text::get_color_region_info(int p_line) { - Map<int, ColorRegionInfo> *cri = NULL; - ERR_FAIL_INDEX_V(p_line, text.size(), *cri); //enjoy your crash + static Map<int, ColorRegionInfo> cri; + ERR_FAIL_INDEX_V(p_line, text.size(), cri); if (text[p_line].width_cache == -1) { _update_line_cache(p_line); @@ -431,7 +430,7 @@ void TextEdit::_notification(int p_what) { double dist = sqrt(target_y * target_y); double vel = ((target_y / dist) * v_scroll_speed) * get_fixed_process_delta_time(); - if (vel >= dist) { + if (Math::abs(vel) >= dist) { v_scroll->set_value(target_v_scroll); scrolling = false; set_fixed_process(false); @@ -2114,7 +2113,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { //keep indentation int space_count = 0; - for (int i = 0; i < text[cursor.line].length(); i++) { + for (int i = 0; i < cursor.column; i++) { if (text[cursor.line][i] == '\t') { if (indent_using_spaces) { ins += space_indent; @@ -2137,15 +2136,25 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { break; } } - if (auto_indent) { - // indent once again if previous line will end with ':' - // (i.e. colon precedes current cursor position) - if (cursor.column > 0 && text[cursor.line][cursor.column - 1] == ':') { + + bool brace_indent = false; + + // no need to indent if we are going upwards. + if (auto_indent && !(k->get_command() && k->get_shift())) { + // indent once again if previous line will end with ':' or '{' + // (i.e. colon/brace precedes current cursor position) + if (cursor.column > 0 && (text[cursor.line][cursor.column - 1] == ':' || text[cursor.line][cursor.column - 1] == '{')) { if (indent_using_spaces) { ins += space_indent; } else { ins += "\t"; } + + // no need to move the brace below if we are not taking the text with us. + if (text[cursor.line][cursor.column] == '}' && !k->get_command()) { + brace_indent = true; + ins += "\n" + ins.substr(1, ins.length() - 2); + } } } @@ -2169,6 +2178,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { if (first_line) { cursor_set_line(0); + } else if (brace_indent) { + cursor_set_line(cursor.line - 1); + cursor_set_column(text[cursor.line].length()); } } break; @@ -2736,6 +2748,15 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { else undo(); } break; + case KEY_Y: { + + if (!k->get_command()) { + scancode_handled = false; + break; + } + + redo(); + } break; case KEY_V: { if (readonly) { break; @@ -3181,6 +3202,11 @@ void TextEdit::adjust_viewport_to_cursor() { if (cursor.line < cursor.line_ofs) cursor.line_ofs = cursor.line; + if (cursor.line_ofs + visible_rows > text.size() && !scroll_past_end_of_file_enabled) { + cursor.line_ofs = text.size() - visible_rows; + v_scroll->set_value(text.size() - visible_rows); + } + int cursor_x = get_column_x_offset(cursor.column, text[cursor.line]); if (cursor_x > (cursor.x_ofs + visible_width)) @@ -3653,10 +3679,10 @@ void TextEdit::cut() { String clipboard = _base_get_text(selection.from_line, selection.from_column, selection.to_line, selection.to_column); OS::get_singleton()->set_clipboard(clipboard); - cursor_set_line(selection.from_line); + _remove_text(selection.from_line, selection.from_column, selection.to_line, selection.to_column); + cursor_set_line(selection.from_line); // set afterwards else it causes the view to be offset cursor_set_column(selection.from_column); - _remove_text(selection.from_line, selection.from_column, selection.to_line, selection.to_column); selection.active = false; selection.selecting_mode = Selection::MODE_NONE; update(); @@ -4319,6 +4345,7 @@ void TextEdit::_cancel_completion() { return; completion_active = false; + completion_forced = false; update(); } @@ -4386,13 +4413,19 @@ void TextEdit::_update_completion_candidates() { } } - if (cursor.column > 0 && l[cursor.column - 1] == '(' && !pre_keyword && !completion_strings[0].begins_with("\"")) { + if (cursor.column > 0 && l[cursor.column - 1] == '(' && !pre_keyword && !completion_forced) { cancel = true; } update(); - if (cancel || (!pre_keyword && s == "" && (cofs == 0 || !completion_prefixes.has(String::chr(l[cofs - 1]))))) { + bool prev_is_prefix = false; + if (cofs > 0 && completion_prefixes.has(String::chr(l[cofs - 1]))) + prev_is_prefix = true; + if (cofs > 1 && l[cofs - 1] == ' ' && completion_prefixes.has(String::chr(l[cofs - 2]))) //check with one space before prefix, to allow indent + prev_is_prefix = true; + + if (cancel || (!pre_keyword && s == "" && (cofs == 0 || !prev_is_prefix))) { //none to complete, cancel _cancel_completion(); return; @@ -4450,18 +4483,6 @@ void TextEdit::_update_completion_candidates() { // The top of the list is the best match completion_current = completion_options[0]; - -#if 0 // even there's only one option, user still get the chance to choose using it or not - if (completion_options.size()==1) { - //one option to complete, just complete it automagically - _confirm_completion(); - //insert_text_at_cursor(completion_options[0].substr(s.length(),completion_options[0].length()-s.length())); - _cancel_completion(); - return; - - } -#endif - completion_enabled = true; } @@ -4481,6 +4502,8 @@ void TextEdit::query_code_comple() { if (ofs > 0 && (inquote || _is_completable(l[ofs - 1]) || completion_prefixes.has(String::chr(l[ofs - 1])))) emit_signal("request_completion"); + else if (ofs > 1 && l[ofs - 1] == ' ' && completion_prefixes.has(String::chr(l[ofs - 2]))) //make it work with a space too, it's good enough + emit_signal("request_completion"); } void TextEdit::set_code_hint(const String &p_hint) { @@ -4492,12 +4515,13 @@ void TextEdit::set_code_hint(const String &p_hint) { update(); } -void TextEdit::code_complete(const Vector<String> &p_strings) { +void TextEdit::code_complete(const Vector<String> &p_strings, bool p_forced) { VisualServer::get_singleton()->canvas_item_set_z(get_canvas_item(), 1); raised_from_completion = true; completion_strings = p_strings; completion_active = true; + completion_forced = p_forced; completion_current = ""; completion_index = 0; _update_completion_candidates(); @@ -4520,7 +4544,7 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const { bool symbol = beg < s.length() && _is_symbol(s[beg]); //not sure if right but most editors behave like this bool inside_quotes = false; - int qbegin, qend; + int qbegin = 0, qend = 0; for (int i = 0; i < s.length(); i++) { if (s[i] == '"') { if (inside_quotes) { @@ -4885,24 +4909,6 @@ TextEdit::TextEdit() { click_select_held->set_wait_time(0.05); click_select_held->connect("timeout", this, "_click_selection_held"); -#if 0 - syntax_coloring=true; - keywords["void"]=Color(0.3,0.0,0.1); - keywords["int"]=Color(0.3,0.0,0.1); - keywords["function"]=Color(0.3,0.0,0.1); - keywords["class"]=Color(0.3,0.0,0.1); - keywords["extends"]=Color(0.3,0.0,0.1); - keywords["constructor"]=Color(0.3,0.0,0.1); - symbol_color=Color(0.1,0.0,0.3,1.0); - - color_regions.push_back(ColorRegion("/*","*/",Color(0.4,0.6,0,4))); - color_regions.push_back(ColorRegion("//","",Color(0.6,0.6,0.4))); - color_regions.push_back(ColorRegion("\"","\"",Color(0.4,0.7,0.7))); - color_regions.push_back(ColorRegion("'","'",Color(0.4,0.8,0.8))); - color_regions.push_back(ColorRegion("#","",Color(0.2,1.0,0.2))); - -#endif - current_op.type = TextOperation::TYPE_NONE; undo_enabled = true; undo_stack_pos = NULL; diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 6321cad2da..68ef559f46 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -205,6 +205,7 @@ class TextEdit : public Control { Vector<String> completion_strings; Vector<String> completion_options; bool completion_active; + bool completion_forced; String completion_current; String completion_base; int completion_index; @@ -522,7 +523,7 @@ public: void set_tooltip_request_func(Object *p_obj, const StringName &p_function, const Variant &p_udata); void set_completion(bool p_enabled, const Vector<String> &p_prefixes); - void code_complete(const Vector<String> &p_strings); + void code_complete(const Vector<String> &p_strings, bool p_forced = false); void set_code_hint(const String &p_hint); void query_code_comple(); diff --git a/scene/gui/texture_button.cpp b/scene/gui/texture_button.cpp index d307b463d9..77bc876201 100644 --- a/scene/gui/texture_button.cpp +++ b/scene/gui/texture_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/texture_button.h b/scene/gui/texture_button.h index 8df30cd35a..94f372decf 100644 --- a/scene/gui/texture_button.h +++ b/scene/gui/texture_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp index 59cff84719..aad7c6b96b 100644 --- a/scene/gui/texture_progress.cpp +++ b/scene/gui/texture_progress.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/texture_progress.h b/scene/gui/texture_progress.h index 20546bd11f..04096d35e3 100644 --- a/scene/gui/texture_progress.h +++ b/scene/gui/texture_progress.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/texture_rect.cpp b/scene/gui/texture_rect.cpp index db340fd4d7..38f90fe7b5 100644 --- a/scene/gui/texture_rect.cpp +++ b/scene/gui/texture_rect.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/texture_rect.h b/scene/gui/texture_rect.h index dcc6c3f9bd..8a2b715488 100644 --- a/scene/gui/texture_rect.h +++ b/scene/gui/texture_rect.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/tool_button.cpp b/scene/gui/tool_button.cpp index 5fc4b6ecf8..4dfa3d8f37 100644 --- a/scene/gui/tool_button.cpp +++ b/scene/gui/tool_button.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/tool_button.h b/scene/gui/tool_button.h index d243b5559f..4c5ea685de 100644 --- a/scene/gui/tool_button.h +++ b/scene/gui/tool_button.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 20bf818d44..de17416d8e 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "tree.h" + #include "os/input.h" #include "os/keyboard.h" #include "os/os.h" @@ -990,41 +991,10 @@ void Tree::draw_item_rect(const TreeItem::Cell &p_cell, const Rect2i &p_rect, co rect.size.x -= bmsize.x + cache.hseparation; } - /* - if (p_tool) - rect.size.x-=Math::floor(rect.size.y/2); - */ - rect.position.y += Math::floor((rect.size.y - font->get_height()) / 2.0) + font->get_ascent(); font->draw(ci, rect.position, text, p_color, rect.size.x); } -#if 0 -void Tree::draw_item_text(String p_text,const Ref<Texture>& p_icon,int p_icon_max_w,bool p_tool,Rect2i p_rect,const Color& p_color) { - - RID ci = get_canvas_item(); - if (!p_icon.is_null()) { - Size2i bmsize = p_icon->get_size(); - if (p_icon_max_w>0 && bmsize.width > p_icon_max_w) { - bmsize.height = bmsize.height * p_icon_max_w / bmsize.width; - bmsize.width=p_icon_max_w; - } - - draw_texture_rect(p_icon,Rect2(p_rect.pos + Size2i(0,Math::floor((p_rect.size.y-bmsize.y)/2)),bmsize)); - p_rect.pos.x+=bmsize.x+cache.hseparation; - p_rect.size.x-=bmsize.x+cache.hseparation; - - } - - if (p_tool) - p_rect.size.x-=Math::floor(p_rect.size.y/2); - - Ref<Font> font = cache.font; - - p_rect.pos.y+=Math::floor((p_rect.size.y-font->get_height())/2.0) +font->get_ascent(); - font->draw(ci,p_rect.pos,p_text,p_color,p_rect.size.x); -} -#endif int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 &p_draw_size, TreeItem *p_item) { if (p_pos.y - cache.offset.y > (p_draw_size.height)) @@ -1146,7 +1116,8 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 cache.selected->draw(ci, r); } if (text_editor->is_visible_in_tree()) { - text_editor->set_position(get_global_position() + r.position); + Vector2 ofs(0, (text_editor->get_size().height - r.size.height) / 2); + text_editor->set_position(get_global_position() + r.position - ofs); } } @@ -2473,22 +2444,24 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { Point2 pos = b->get_position() - bg->get_offset(); cache.click_type = Cache::CLICK_NONE; - if (show_column_titles && b->get_button_index() == BUTTON_LEFT) { + if (show_column_titles) { pos.y -= _get_title_button_height(); if (pos.y < 0) { - pos.x += cache.offset.x; - int len = 0; - for (int i = 0; i < columns.size(); i++) { - - len += get_column_width(i); - if (pos.x < len) { - - cache.click_type = Cache::CLICK_TITLE; - cache.click_index = i; - //cache.click_id=; - update(); - break; + if (b->get_button_index() == BUTTON_LEFT) { + pos.x += cache.offset.x; + int len = 0; + for (int i = 0; i < columns.size(); i++) { + + len += get_column_width(i); + if (pos.x < len) { + + cache.click_type = Cache::CLICK_TITLE; + cache.click_index = i; + //cache.click_id=; + update(); + break; + } } } break; @@ -2600,7 +2573,8 @@ bool Tree::edit_selected() { } else if (c.mode == TreeItem::CELL_MODE_STRING || c.mode == TreeItem::CELL_MODE_RANGE || c.mode == TreeItem::CELL_MODE_RANGE_EXPRESSION) { - Point2i textedpos = get_global_position() + rect.position; + Vector2 ofs(0, (text_editor->get_size().height - rect.size.height) / 2); + Point2i textedpos = get_global_position() + rect.position - ofs; text_editor->set_position(textedpos); text_editor->set_size(rect.size); text_editor->clear(); @@ -2868,8 +2842,8 @@ TreeItem *Tree::create_item(TreeItem *p_parent) { TreeItem *ti = memnew(TreeItem(this)); - ti->cells.resize(columns.size()); ERR_FAIL_COND_V(!ti, NULL); + ti->cells.resize(columns.size()); if (p_parent) { diff --git a/scene/gui/tree.h b/scene/gui/tree.h index 49a410f115..06d6d3ad5a 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -54,7 +54,7 @@ public: CELL_MODE_CHECK, ///< string + check CELL_MODE_RANGE, ///< Contains a range CELL_MODE_RANGE_EXPRESSION, ///< Contains a range - CELL_MODE_ICON, ///< Contains a icon, not editable + CELL_MODE_ICON, ///< Contains an icon, not editable CELL_MODE_CUSTOM, ///< Contains a custom value, show a string, and an edit button }; @@ -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/video_player.cpp b/scene/gui/video_player.cpp index 37d10fb63e..a92155cc4f 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,27 +28,9 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "video_player.h" + #include "os/os.h" #include "servers/audio_server.h" -/* - -int VideoPlayer::InternalStream::get_channel_count() const { - - return player->sp_get_channel_count(); -} -void VideoPlayer::InternalStream::set_mix_rate(int p_rate){ - - return player->sp_set_mix_rate(p_rate); -} -bool VideoPlayer::InternalStream::mix(int32_t *p_buffer,int p_frames){ - - return player->sp_mix(p_buffer,p_frames); -} -void VideoPlayer::InternalStream::update(){ - - player->sp_update(); -} -*/ int VideoPlayer::sp_get_channel_count() const { @@ -69,31 +51,6 @@ bool VideoPlayer::sp_mix(int32_t *p_buffer, int p_frames) { return false; } -void VideoPlayer::sp_update() { -#if 0 - _THREAD_SAFE_METHOD_ - //update is unused - if (!paused && playback.is_valid()) { - - if (!playback->is_playing()) { - //stream depleted data, but there's still audio in the ringbuffer - //check that all this audio has been flushed before stopping the stream - int to_mix = resampler.get_total() - resampler.get_todo(); - if (to_mix==0) { - stop(); - return; - } - - return; - } - - int todo =resampler.get_todo(); - int wrote = playback->mix(resampler.get_write_buffer(),todo); - resampler.write(wrote); - } -#endif -} - int VideoPlayer::_audio_mix_callback(void *p_udata, const int16_t *p_data, int p_frames) { VideoPlayer *vp = (VideoPlayer *)p_udata; diff --git a/scene/gui/video_player.h b/scene/gui/video_player.h index 87c452509b..b78f3aabe7 100644 --- a/scene/gui/video_player.h +++ b/scene/gui/video_player.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -38,23 +38,12 @@ class VideoPlayer : public Control { GDCLASS(VideoPlayer, Control); - /* struct InternalStream : public AudioServer::AudioStream { - VideoPlayer *player; - virtual int get_channel_count() const; - virtual void set_mix_rate(int p_rate); //notify the stream of the mix rate - virtual bool mix(int32_t *p_buffer,int p_frames); - virtual void update(); - }; -*/ - - // InternalStream internal_stream; Ref<VideoStreamPlayback> playback; Ref<VideoStream> stream; int sp_get_channel_count() const; void sp_set_mix_rate(int p_rate); //notify the stream of the mix rate bool sp_mix(int32_t *p_buffer, int p_frames); - void sp_update(); RID stream_rid; @@ -118,4 +107,4 @@ public: ~VideoPlayer(); }; -#endif +#endif // VIDEO_PLAYER_H diff --git a/scene/gui/viewport_container.cpp b/scene/gui/viewport_container.cpp index dbc2699867..c321b873fd 100644 --- a/scene/gui/viewport_container.cpp +++ b/scene/gui/viewport_container.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/gui/viewport_container.h b/scene/gui/viewport_container.h index 27eb6ec81b..630523b5fb 100644 --- a/scene/gui/viewport_container.h +++ b/scene/gui/viewport_container.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/io/SCsub b/scene/io/SCsub deleted file mode 100644 index bf9125be7f..0000000000 --- a/scene/io/SCsub +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -Import('env') - -env.add_source_files(env.scene_sources, "*.cpp") - -Export('env') diff --git a/scene/io/resource_format_image.cpp b/scene/io/resource_format_image.cpp deleted file mode 100644 index 04b6177c3c..0000000000 --- a/scene/io/resource_format_image.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/*************************************************************************/ -/* resource_format_image.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#include "resource_format_image.h" - -#if 0 -#include "io/image_loader.h" -#include "os/os.h" -#include "project_settings.h" -#include "scene/resources/texture.h" -RES ResourceFormatLoaderImage::load(const String &p_path, const String& p_original_path, Error *r_error) { - - if (r_error) - *r_error=ERR_CANT_OPEN; - - if (p_path.get_extension()=="cube") { - // open as cubemap txture - - CubeMap* ptr = memnew(CubeMap); - Ref<CubeMap> cubemap( ptr ); - - Error err; - FileAccess *f = FileAccess::open(p_path,FileAccess::READ,&err); - if (err) { - - ERR_FAIL_COND_V( err, RES() ); - } - - String base_path=p_path.substr( 0, p_path.find_last("/")+1 ); - - for(int i=0;i<6;i++) { - - String file = f->get_line().strip_edges(); - Image image; - - Error err = ImageLoader::load_image(base_path+file,&image); - - - if (err) { - - memdelete(f); - ERR_FAIL_COND_V( err, RES() ); - } - - if (i==0) { - - //cubemap->create(image.get_width(),image.get_height(),image.get_format(),Texture::FLAGS_DEFAULT|Texture::FLAG_CUBEMAP); - } - - static const CubeMap::Side cube_side[6]= { - CubeMap::SIDE_LEFT, - CubeMap::SIDE_RIGHT, - CubeMap::SIDE_BOTTOM, - CubeMap::SIDE_TOP, - CubeMap::SIDE_FRONT, - CubeMap::SIDE_BACK - }; - - cubemap->set_side(cube_side[i],image); - } - - memdelete(f); - - cubemap->set_name(p_path.get_file()); - if (r_error) - *r_error=OK; - - return cubemap; - - } else { - // simple image - - ImageTexture* ptr = memnew(ImageTexture); - Ref<ImageTexture> texture( ptr ); - - uint64_t begtime; - double total; - - Image image; - - if (debug_load_times) - begtime=OS::get_singleton()->get_ticks_usec(); - - - Error err = ImageLoader::load_image(p_path,&image); - - if (!err && debug_load_times) { - double total=USEC_TO_SEC((OS::get_singleton()->get_ticks_usec()-begtime)); - print_line("IMAGE: "+itos(image.get_width())+"x"+itos(image.get_height())); - print_line(" -load: "+rtos(total)); - } - - - ERR_EXPLAIN("Failed loading image: "+p_path); - ERR_FAIL_COND_V(err, RES()); - if (r_error) - *r_error=ERR_FILE_CORRUPT; - -#ifdef DEBUG_ENABLED -#ifdef TOOLS_ENABLED - - if (max_texture_size && (image.get_width() > max_texture_size || image.get_height() > max_texture_size)) { - - - if (bool(ProjectSettings::get_singleton()->get("debug/image_loader/max_texture_size_alert"))) { - OS::get_singleton()->alert("Texture is too large: '"+p_path+"', at "+itos(image.get_width())+"x"+itos(image.get_height())+". Max allowed size is: "+itos(max_texture_size)+"x"+itos(max_texture_size)+".","BAD ARTIST, NO COOKIE!"); - } - - ERR_EXPLAIN("Texture is too large: '"+p_path+"', at "+itos(image.get_width())+"x"+itos(image.get_height())+". Max allowed size is: "+itos(max_texture_size)+"x"+itos(max_texture_size)+"."); - ERR_FAIL_V(RES()); - } -#endif -#endif - - - uint32_t flags=load_image_flags(p_path); - - if (debug_load_times) - begtime=OS::get_singleton()->get_ticks_usec(); - - //print_line("img: "+p_path+" flags: "+itos(flags)); - texture->create_from_image( image,flags ); - texture->set_name(p_path.get_file()); - - - if (debug_load_times) { - total=USEC_TO_SEC(OS::get_singleton()->get_ticks_usec()-begtime); - print_line(" -make texture: "+rtos(total)); - } - - if (r_error) - *r_error=OK; - - return RES( texture ); - } - - -} - -uint32_t ResourceFormatLoaderImage::load_image_flags(const String &p_path) { - - - FileAccess *f2 = FileAccess::open(p_path+".flags",FileAccess::READ); - Map<String,bool> flags_found; - if (f2) { - - while(!f2->eof_reached()) { - String l2 = f2->get_line(); - int eqpos = l2.find("="); - if (eqpos!=-1) { - String flag=l2.substr(0,eqpos).strip_edges(); - String val=l2.substr(eqpos+1,l2.length()).strip_edges().to_lower(); - flags_found[flag]=(val=="true" || val=="1")?true:false; - } - } - memdelete(f2); - } - - - uint32_t flags=0; - - if (flags_found.has("filter")) { - if (flags_found["filter"]) - flags|=Texture::FLAG_FILTER; - } else if (bool(GLOBAL_DEF("rendering/image_loader/filter",true))) { - flags|=Texture::FLAG_FILTER; - } - - - if (flags_found.has("gen_mipmaps")) { - if (flags_found["gen_mipmaps"]) - flags|=Texture::FLAG_MIPMAPS; - } else if (bool(GLOBAL_DEF("rendering/image_loader/gen_mipmaps",true))) { - flags|=Texture::FLAG_MIPMAPS; - } - - if (flags_found.has("repeat")) { - if (flags_found["repeat"]) - flags|=Texture::FLAG_REPEAT; - } else if (bool(GLOBAL_DEF("rendering/image_loader/repeat",true))) { - flags|=Texture::FLAG_REPEAT; - } - - if (flags_found.has("anisotropic")) { - if (flags_found["anisotropic"]) - flags|=Texture::FLAG_ANISOTROPIC_FILTER; - } - - if (flags_found.has("tolinear")) { - if (flags_found["tolinear"]) - flags|=Texture::FLAG_CONVERT_TO_LINEAR; - } - - if (flags_found.has("mirroredrepeat")) { - if (flags_found["mirroredrepeat"]) - flags|=Texture::FLAG_MIRRORED_REPEAT; - } - - return flags; -} - -bool ResourceFormatLoaderImage::handles_type(const String& p_type) const { - - return ClassDB::is_parent_class(p_type,"Texture") || ClassDB::is_parent_class(p_type,"CubeMap"); -} - -void ResourceFormatLoaderImage::get_recognized_extensions(List<String> *p_extensions) const { - - ImageLoader::get_recognized_extensions(p_extensions); - p_extensions->push_back("cube"); -} - -String ResourceFormatLoaderImage::get_resource_type(const String &p_path) const { - - String ext=p_path.get_extension().to_lower(); - if (ext=="cube") - return "CubeMap"; - - List<String> extensions; - ImageLoader::get_recognized_extensions(&extensions); - - for(List<String>::Element *E=extensions.front();E;E=E->next()) { - if (E->get()==ext) - return "ImageTexture"; - } - return ""; -} - - -ResourceFormatLoaderImage::ResourceFormatLoaderImage() { - - max_texture_size = GLOBAL_DEF("debug/image_loader/max_texture_size",0); - GLOBAL_DEF("debug/image_loader/max_texture_size_alert",false); - debug_load_times=GLOBAL_DEF("debug/image_loader/image_load_times",false); - GLOBAL_DEF("rendering/image_loader/filter",true); - GLOBAL_DEF("rendering/image_loader/gen_mipmaps",true); - GLOBAL_DEF("rendering/image_loader/repeat",false); - -} -#endif diff --git a/scene/io/resource_format_image.h b/scene/io/resource_format_image.h deleted file mode 100644 index 2cf6315f17..0000000000 --- a/scene/io/resource_format_image.h +++ /dev/null @@ -1,55 +0,0 @@ -/*************************************************************************/ -/* resource_format_image.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef RESOURCE_FORMAT_IMAGE_H -#define RESOURCE_FORMAT_IMAGE_H - -#if 0 - -#include "io/resource_loader.h" -#include "io/resource_saver.h" -/** - @author Juan Linietsky <reduzio@gmail.com> -*/ -class ResourceFormatLoaderImage : public ResourceFormatLoader { - - bool debug_load_times; - int max_texture_size; -public: - virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL); - static uint32_t load_image_flags(const String &p_path); - virtual void get_recognized_extensions(List<String> *p_extensions) const; - virtual bool handles_type(const String& p_type) const; - virtual String get_resource_type(const String &p_path) const; - - ResourceFormatLoaderImage(); -}; - -#endif -#endif diff --git a/scene/io/resource_format_wav.cpp b/scene/io/resource_format_wav.cpp deleted file mode 100644 index dabbb79de3..0000000000 --- a/scene/io/resource_format_wav.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/*************************************************************************/ -/* resource_format_wav.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#if 0 -#include "resource_format_wav.h" -#include "os/file_access.h" -#include "scene/resources/sample.h" - - -RES ResourceFormatLoaderWAV::load(const String &p_path, const String& p_original_path, Error *r_error) { - if (r_error) - *r_error=ERR_FILE_CANT_OPEN; - - Error err; - FileAccess *file=FileAccess::open(p_path, FileAccess::READ,&err); - - ERR_FAIL_COND_V( err!=OK, RES() ); - - if (r_error) - *r_error=ERR_FILE_CORRUPT; - - /* CHECK RIFF */ - char riff[5]; - riff[4]=0; - file->get_buffer((uint8_t*)&riff,4); //RIFF - - if (riff[0]!='R' || riff[1]!='I' || riff[2]!='F' || riff[3]!='F') { - - file->close(); - memdelete(file); - ERR_FAIL_V( RES() ); - } - - - /* GET FILESIZE */ - uint32_t filesize=file->get_32(); - - /* CHECK WAVE */ - - char wave[4]; - - file->get_buffer((uint8_t*)&wave,4); //RIFF - - if (wave[0]!='W' || wave[1]!='A' || wave[2]!='V' || wave[3]!='E') { - - - file->close(); - memdelete(file); - ERR_EXPLAIN("Not a WAV file (no WAVE RIFF Header)") - ERR_FAIL_V( RES() ); - } - - bool format_found=false; - bool data_found=false; - int format_bits=0; - int format_channels=0; - int format_freq=0; - Sample::LoopFormat loop=Sample::LOOP_NONE; - int loop_begin=0; - int loop_end=0; - - - Ref<Sample> sample( memnew( Sample ) ); - - - while (!file->eof_reached()) { - - - /* chunk */ - char chunkID[4]; - file->get_buffer((uint8_t*)&chunkID,4); //RIFF - - /* chunk size */ - uint32_t chunksize=file->get_32(); - uint32_t file_pos=file->get_position(); //save file pos, so we can skip to next chunk safely - - if (file->eof_reached()) { - - //ERR_PRINT("EOF REACH"); - break; - } - - if (chunkID[0]=='f' && chunkID[1]=='m' && chunkID[2]=='t' && chunkID[3]==' ' && !format_found) { - /* IS FORMAT CHUNK */ - - uint16_t compression_code=file->get_16(); - - - if (compression_code!=1) { - ERR_PRINT("Format not supported for WAVE file (not PCM). Save WAVE files as uncompressed PCM instead."); - break; - } - - format_channels=file->get_16(); - if (format_channels!=1 && format_channels !=2) { - - ERR_PRINT("Format not supported for WAVE file (not stereo or mono)"); - break; - - } - - format_freq=file->get_32(); //sampling rate - - file->get_32(); // average bits/second (unused) - file->get_16(); // block align (unused) - format_bits=file->get_16(); // bits per sample - - if (format_bits%8) { - - ERR_PRINT("Strange number of bits in sample (not 8,16,24,32)"); - break; - } - - /* Don't need anything else, continue */ - format_found=true; - } - - - if (chunkID[0]=='d' && chunkID[1]=='a' && chunkID[2]=='t' && chunkID[3]=='a' && !data_found) { - /* IS FORMAT CHUNK */ - data_found=true; - - if (!format_found) { - ERR_PRINT("'data' chunk before 'format' chunk found."); - break; - - } - - int frames=chunksize; - - frames/=format_channels; - frames/=(format_bits>>3); - - /*print_line("chunksize: "+itos(chunksize)); - print_line("channels: "+itos(format_channels)); - print_line("bits: "+itos(format_bits)); -*/ - sample->create( - (format_bits==8) ? Sample::FORMAT_PCM8 : Sample::FORMAT_PCM16, - (format_channels==2)?true:false, - frames ); - sample->set_mix_rate( format_freq ); - - int len=frames; - if (format_channels==2) - len*=2; - if (format_bits>8) - len*=2; - - PoolVector<uint8_t> data; - data.resize(len); - PoolVector<uint8_t>::Write dataw = data.write(); - void * data_ptr = dataw.ptr(); - - for (int i=0;i<frames;i++) { - - - for (int c=0;c<format_channels;c++) { - - - if (format_bits==8) { - // 8 bit samples are UNSIGNED - - uint8_t s = file->get_8(); - s-=128; - int8_t *sp=(int8_t*)&s; - - int8_t *data_ptr8=&((int8_t*)data_ptr)[i*format_channels+c]; - - *data_ptr8=*sp; - - } else { - //16+ bits samples are SIGNED - // if sample is > 16 bits, just read extra bytes - - uint32_t data=0; - for (int b=0;b<(format_bits>>3);b++) { - - data|=((uint32_t)file->get_8())<<(b*8); - } - data<<=(32-format_bits); - - - int32_t s=data; - - int16_t *data_ptr16=&((int16_t*)data_ptr)[i*format_channels+c]; - - *data_ptr16=s>>16; - } - } - - } - - dataw=PoolVector<uint8_t>::Write(); - - sample->set_data(data); - - - if (file->eof_reached()) { - file->close(); - memdelete(file); - ERR_EXPLAIN("Premature end of file."); - ERR_FAIL_V(RES()); - } - } - - if (chunkID[0]=='s' && chunkID[1]=='m' && chunkID[2]=='p' && chunkID[3]=='l') { - //loop point info! - - for(int i=0;i<10;i++) - file->get_32(); // i wish to know why should i do this... no doc! - - loop=file->get_32()?Sample::LOOP_PING_PONG:Sample::LOOP_FORWARD; - loop_begin=file->get_32(); - loop_end=file->get_32(); - - } - file->seek( file_pos+chunksize ); - } - - sample->set_loop_format(loop); - sample->set_loop_begin(loop_begin); - sample->set_loop_end(loop_end); - - file->close(); - memdelete(file); - - if (r_error) - *r_error=OK; - - - return sample; - -} -void ResourceFormatLoaderWAV::get_recognized_extensions(List<String> *p_extensions) const { - - p_extensions->push_back("wav"); -} -bool ResourceFormatLoaderWAV::handles_type(const String& p_type) const { - - return (p_type=="Sample"); -} - -String ResourceFormatLoaderWAV::get_resource_type(const String &p_path) const { - - if (p_path.get_extension().to_lower()=="wav") - return "Sample"; - return ""; -} - -#endif diff --git a/scene/io/resource_format_wav.h b/scene/io/resource_format_wav.h deleted file mode 100644 index 9105689670..0000000000 --- a/scene/io/resource_format_wav.h +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************/ -/* resource_format_wav.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef RESOURCE_FORMAT_WAV_H -#define RESOURCE_FORMAT_WAV_H - -#if 0 -#include "io/resource_loader.h" - -class ResourceFormatLoaderWAV : public ResourceFormatLoader { -public: - virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL); - virtual void get_recognized_extensions(List<String> *p_extensions) const; - virtual bool handles_type(const String& p_type) const; - virtual String get_resource_type(const String &p_path) const; - -}; - -#endif -#endif // RESOURCE_FORMAT_WAV_H diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp index 77407fdde7..ce8714e574 100644 --- a/scene/main/canvas_layer.cpp +++ b/scene/main/canvas_layer.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/canvas_layer.h b/scene/main/canvas_layer.h index b14a915fe8..fbee87f487 100644 --- a/scene/main/canvas_layer.h +++ b/scene/main/canvas_layer.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/http_request.cpp b/scene/main/http_request.cpp index e57cd857f8..1e1e4f2d5f 100644 --- a/scene/main/http_request.cpp +++ b/scene/main/http_request.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/http_request.h b/scene/main/http_request.h index 104f529eae..790ff5f7ef 100644 --- a/scene/main/http_request.h +++ b/scene/main/http_request.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/instance_placeholder.cpp b/scene/main/instance_placeholder.cpp index 5580ef486e..cbe30e05dd 100644 --- a/scene/main/instance_placeholder.cpp +++ b/scene/main/instance_placeholder.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/instance_placeholder.h b/scene/main/instance_placeholder.h index ec4520e1c8..375c87a035 100644 --- a/scene/main/instance_placeholder.h +++ b/scene/main/instance_placeholder.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/node.cpp b/scene/main/node.cpp index c850a5ae74..a543dba9cb 100755 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "node.h" + #include "instance_placeholder.h" #include "io/resource_loader.h" #include "message_queue.h" @@ -194,7 +195,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; @@ -360,18 +361,6 @@ void Node::add_child_notify(Node *p_child) { // to be used when not wanted } -/* -void Node::remove_and_delete_child(Node *p_child) { - - ERR_FAIL_NULL( p_child ); - ERR_FAIL_COND( p_child->get_parent()!=this ); - - remove_child(p_child); - memdelete(p_child); - -} -*/ - void Node::remove_child_notify(Node *p_child) { // to be used when not wanted @@ -675,31 +664,6 @@ Variant Node::_rpc_unreliable_id_bind(const Variant **p_args, int p_argcount, Va return Variant(); } -#if 0 -Variant Node::_rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) { - - if (p_argcount<1) { - r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument=1; - return Variant(); - } - - if (p_args[0]->get_type()!=Variant::STRING) { - r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument=0; - r_error.expected=Variant::STRING; - return Variant(); - } - - StringName method = *p_args[0]; - - rpcp(method,&p_args[1],p_argcount-1); - - r_error.error=Variant::CallError::CALL_OK; - return Variant(); -} - -#endif void Node::rpcp(int p_peer_id, bool p_unreliable, const StringName &p_method, const Variant **p_arg, int p_argcount) { ERR_FAIL_COND(!is_inside_tree()); @@ -1353,20 +1317,24 @@ void Node::_add_child_nocheck(Node *p_child, const StringName &p_name) { void Node::add_child(Node *p_child, bool p_legible_unique_name) { ERR_FAIL_NULL(p_child); - /* Fail if node has a parent */ + if (p_child == this) { - ERR_EXPLAIN("Can't add child " + p_child->get_name() + " to itself.") + ERR_EXPLAIN("Can't add child '" + p_child->get_name() + "' to itself.") ERR_FAIL_COND(p_child == this); // adding to itself! } - ERR_EXPLAIN("Can't add child, already has a parent"); - ERR_FAIL_COND(p_child->data.parent); + + /* Fail if node has a parent */ + if (p_child->data.parent) { + ERR_EXPLAIN("Can't add child '" + p_child->get_name() + "' to '" + get_name() + "', already has a parent '" + p_child->data.parent->get_name() + "'."); + ERR_FAIL_COND(p_child->data.parent); + } if (data.blocked > 0) { - ERR_EXPLAIN("Parent node is busy setting up children, add_node() failed. Consider using call_deferred(\"add_child\",child) instead."); + ERR_EXPLAIN("Parent node is busy setting up children, add_node() failed. Consider using call_deferred(\"add_child\", child) instead."); ERR_FAIL_COND(data.blocked > 0); } - ERR_EXPLAIN("Can't add child while a notification is happening"); + ERR_EXPLAIN("Can't add child while a notification is happening."); ERR_FAIL_COND(data.blocked > 0); /* Validate name */ @@ -1381,7 +1349,7 @@ void Node::add_child_below_node(Node *p_node, Node *p_child, bool p_legible_uniq if (is_a_parent_of(p_node)) { move_child(p_child, p_node->get_position_in_parent() + 1); } else { - WARN_PRINTS("Cannot move under node " + p_node->get_name() + " as " + p_child->get_name() + " does not share a parent") + WARN_PRINTS("Cannot move under node " + p_node->get_name() + " as " + p_child->get_name() + " does not share a parent.") } } @@ -2066,59 +2034,6 @@ HashMap<NodePath, int> Node::get_editable_instances() const { return data.editable_instances; } -#if 0 - -void Node::generate_instance_state() { - - List<PropertyInfo> properties; - get_property_list(&properties); - - data.instance_state.clear(); - - for( List<PropertyInfo>::Element *E=properties.front();E;E=E->next() ) { - - PropertyInfo &pi=E->get(); - if ((pi.usage&PROPERTY_USAGE_NO_INSTANCE_STATE) || !(pi.usage&PROPERTY_USAGE_EDITOR) || !(pi.usage&PROPERTY_USAGE_STORAGE)) - continue; - - data.instance_state[pi.name]=get(pi.name); - } - - List<GroupInfo> groups; - get_groups(&groups); - for(List<GroupInfo>::Element *E=groups.front();E;E=E->next()) { - - if (!E->get().persistent) - continue; - data.instance_groups.push_back(E->get().name); - } - - List<MethodInfo> signal_list; - - get_signal_list(&signal_list); - - for(List<MethodInfo>::Element *E=signal_list.front();E;E=E->next()) { - - StringName name = E->get().name; - List<Connection> connections; - get_signal_connection_list(name,&connections); - - for(List<Connection>::Element *F=connections.front();F;F=F->next()) { - - if (F->get().flags&CONNECT_PERSIST) - data.instance_connections.push_back(F->get()); - } - - } -} - -Dictionary Node::get_instance_state() const { - - return data.instance_state; -} - -#endif - void Node::set_scene_instance_state(const Ref<SceneState> &p_state) { data.instance_state = p_state; @@ -2160,9 +2075,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 +2095,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); @@ -2202,7 +2117,15 @@ Node *Node::_duplicate(int p_flags) const { if (!(p_flags & DUPLICATE_SCRIPTS) && name == "script/script") continue; - node->set(name, get(name)); + Variant value = get(name); + // Duplicate dictionaries and arrays, mainly needed for __meta__ + if (value.get_type() == Variant::DICTIONARY) { + value = Dictionary(value).copy(); + } else if (value.get_type() == Variant::ARRAY) { + value = Array(value).duplicate(); + } + + node->set(name, value); } node->set_name(get_name()); @@ -2270,7 +2193,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); } @@ -2284,7 +2207,16 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; String name = E->get().name; - node->set(name, get(name)); + + Variant value = get(name); + // Duplicate dictionaries and arrays, mainly needed for __meta__ + if (value.get_type() == Variant::DICTIONARY) { + value = Dictionary(value).copy(); + } else if (value.get_type() == Variant::ARRAY) { + value = Array(value).duplicate(); + } + + node->set(name, value); } node->set_name(get_name()); @@ -2326,7 +2258,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 +2287,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 +2542,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; @@ -2748,7 +2680,6 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("get_name"), &Node::get_name); ClassDB::bind_method(D_METHOD("add_child", "node", "legible_unique_name"), &Node::add_child, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_child", "node"), &Node::remove_child); - //ClassDB::bind_method(D_METHOD("remove_and_delete_child","node"),&Node::remove_and_delete_child); ClassDB::bind_method(D_METHOD("get_child_count"), &Node::get_child_count); ClassDB::bind_method(D_METHOD("get_children"), &Node::_get_children); ClassDB::bind_method(D_METHOD("get_child", "idx"), &Node::get_child); @@ -2860,7 +2791,6 @@ void Node::_bind_methods() { BIND_CONSTANT(NOTIFICATION_ENTER_TREE); BIND_CONSTANT(NOTIFICATION_EXIT_TREE); BIND_CONSTANT(NOTIFICATION_MOVED_IN_PARENT); - //BIND_CONSTANT( NOTIFICATION_PARENT_DECONFIGURED ); BIND_CONSTANT(NOTIFICATION_READY); BIND_CONSTANT(NOTIFICATION_FIXED_PROCESS); BIND_CONSTANT(NOTIFICATION_PROCESS); diff --git a/scene/main/node.h b/scene/main/node.h index b5ce6682d8..12d6310062 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -192,7 +192,6 @@ protected: virtual void add_child_notify(Node *p_child); virtual void remove_child_notify(Node *p_child); virtual void move_child_notify(Node *p_child); - //void remove_and_delete_child(Node *p_child); void _propagate_replace_owner(Node *p_owner, Node *p_by_owner); @@ -212,7 +211,6 @@ public: NOTIFICATION_EXIT_TREE = 11, NOTIFICATION_MOVED_IN_PARENT = 12, NOTIFICATION_READY = 13, - //NOTIFICATION_PARENT_DECONFIGURED =15, - it's confusing, it's going away NOTIFICATION_PAUSED = 14, NOTIFICATION_UNPAUSED = 15, NOTIFICATION_FIXED_PROCESS = 16, diff --git a/scene/main/resource_preloader.cpp b/scene/main/resource_preloader.cpp index ae323ba021..35bb6ef7e8 100644 --- a/scene/main/resource_preloader.cpp +++ b/scene/main/resource_preloader.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/resource_preloader.h b/scene/main/resource_preloader.h index a54781dc81..40e900a492 100644 --- a/scene/main/resource_preloader.h +++ b/scene/main/resource_preloader.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 10ab28150b..a71b491bae 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -1,9 +1,9 @@ /*************************************************************************/ -/* scene_main_loop.cpp */ +/* scene_tree.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -29,18 +29,15 @@ /*************************************************************************/ #include "scene_tree.h" +#include "editor/editor_node.h" +#include "io/marshalls.h" +#include "io/resource_loader.h" #include "message_queue.h" #include "node.h" #include "os/keyboard.h" #include "os/os.h" #include "print_string.h" #include "project_settings.h" -#include <stdio.h> -//#include "servers/spatial_sound_2d_server.h" - -#include "editor/editor_node.h" -#include "io/marshalls.h" -#include "io/resource_loader.h" #include "scene/resources/material.h" #include "scene/resources/mesh.h" #include "scene/resources/packed_scene.h" @@ -49,6 +46,8 @@ #include "servers/physics_server.h" #include "viewport.h" +#include <stdio.h> + void SceneTreeTimer::_bind_methods() { ClassDB::bind_method(D_METHOD("set_time_left", "time"), &SceneTreeTimer::set_time_left); @@ -383,7 +382,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++; @@ -413,19 +412,7 @@ void SceneTree::input_event(const Ref<InputEvent> &p_event) { root_lock++; if (!input_handled) { - -#if 0 - _call_input_pause("unhandled_input","_unhandled_input",ev); - //call_group(GROUP_CALL_REVERSE|GROUP_CALL_REALTIME|GROUP_CALL_MULIILEVEL,"unhandled_input","_unhandled_input",ev); - if (!input_handled && ev.type==InputEvent::KEY) { - _call_input_pause("unhandled_key_input","_unhandled_key_input",ev); - //call_group(GROUP_CALL_REVERSE|GROUP_CALL_REALTIME|GROUP_CALL_MULIILEVEL,"unhandled_key_input","_unhandled_key_input",ev); - } -#else - call_group_flags(GROUP_CALL_REALTIME, "_viewports", "_vp_unhandled_input", ev); //special one for GUI, as controls use their own process check - -#endif input_handled = true; _flush_ugc(); root_lock--; @@ -555,6 +542,10 @@ bool SceneTree::idle(float p_time) { if (env_path != String()) { fallback = ResourceLoader::load(env_path); + if (fallback.is_null()) { + //could not load fallback, set as empty + ProjectSettings::get_singleton()->set("rendering/environment/default_environment", ""); + } } else { fallback.unref(); } @@ -1400,12 +1391,12 @@ 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) + Node *no = Object::cast_to<Node>(ClassDB::instance(p_type)); + if (!no) { continue; - Node *no = o->cast_to<Node>(); - no->set_name(p_name); + } + no->set_name(p_name); n2->add_child(no); } } @@ -1708,6 +1699,11 @@ Vector<int> SceneTree::get_network_connected_peers() const { return ret; } + +int SceneTree::get_rpc_sender_id() const { + return rpc_sender_id; +} + void SceneTree::set_refuse_new_network_connections(bool p_refuse) { ERR_FAIL_COND(!network_peer.is_valid()); network_peer->set_refuse_new_connections(p_refuse); @@ -2102,7 +2098,9 @@ void SceneTree::_network_poll() { ERR_PRINT("Error getting packet!"); } + rpc_sender_id = sender; _network_process_packet(sender, packet, len); + rpc_sender_id = 0; if (!network_peer.is_valid()) { break; //it's also possible that a packet or RPC caused a disconnection, so also check here @@ -2182,6 +2180,7 @@ void SceneTree::_bind_methods() { ClassDB::bind_method(D_METHOD("has_network_peer"), &SceneTree::has_network_peer); ClassDB::bind_method(D_METHOD("get_network_connected_peers"), &SceneTree::get_network_connected_peers); ClassDB::bind_method(D_METHOD("get_network_unique_id"), &SceneTree::get_network_unique_id); + ClassDB::bind_method(D_METHOD("get_rpc_sender_id"), &SceneTree::get_rpc_sender_id); ClassDB::bind_method(D_METHOD("set_refuse_new_network_connections", "refuse"), &SceneTree::set_refuse_new_network_connections); ClassDB::bind_method(D_METHOD("is_refusing_new_network_connections"), &SceneTree::is_refusing_new_network_connections); ClassDB::bind_method(D_METHOD("_network_peer_connected"), &SceneTree::_network_peer_connected); @@ -2266,6 +2265,7 @@ SceneTree::SceneTree() { call_lock = 0; root_lock = 0; node_count = 0; + rpc_sender_id = 0; //create with mainloop diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index c62607244e..c116bec4fc 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -1,9 +1,9 @@ /*************************************************************************/ -/* scene_main_loop.h */ +/* scene_tree.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -199,6 +199,8 @@ private: void _connection_failed(); void _server_disconnected(); + int rpc_sender_id; + //path sent caches struct PathSentCache { Map<int, bool> confirmed_peers; @@ -445,6 +447,7 @@ public: bool has_network_peer() const; int get_network_unique_id() const; Vector<int> get_network_connected_peers() const; + int get_rpc_sender_id() const; void set_refuse_new_network_connections(bool p_refuse); bool is_refusing_new_network_connections() const; diff --git a/scene/main/timer.cpp b/scene/main/timer.cpp index 42690ab93a..df7d609ac0 100755 --- a/scene/main/timer.cpp +++ b/scene/main/timer.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/timer.h b/scene/main/timer.h index dd4711ec37..0cd92f12de 100755 --- a/scene/main/timer.h +++ b/scene/main/timer.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index e0800f4907..434d594bbb 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,28 +28,23 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "viewport.h" + #include "os/input.h" #include "os/os.h" -#include "scene/3d/spatial.h" -#include "servers/physics_2d_server.h" -//#include "scene/3d/camera.h" - +#include "project_settings.h" +#include "scene/2d/collision_object_2d.h" #include "scene/3d/camera.h" #include "scene/3d/collision_object.h" #include "scene/3d/listener.h" -#include "scene/3d/spatial_indexer.h" +#include "scene/3d/scenario_fx.h" +#include "scene/3d/spatial.h" #include "scene/gui/control.h" -#include "scene/resources/mesh.h" - -#include "scene/2d/collision_object_2d.h" - #include "scene/gui/label.h" #include "scene/gui/panel.h" #include "scene/main/timer.h" +#include "scene/resources/mesh.h" #include "scene/scene_string_names.h" - -#include "project_settings.h" -#include "scene/3d/scenario_fx.h" +#include "servers/physics_2d_server.h" void ViewportTexture::setup_local_to_scene() { @@ -68,7 +63,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 +332,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(); } } @@ -399,7 +390,7 @@ void Viewport::_notification(int p_what) { contact_3d_debug_instance = VisualServer::get_singleton()->instance_create(); VisualServer::get_singleton()->instance_set_base(contact_3d_debug_instance, contact_3d_debug_multimesh); VisualServer::get_singleton()->instance_set_scenario(contact_3d_debug_instance, find_world()->get_scenario()); - VisualServer::get_singleton()->instance_geometry_set_flag(contact_3d_debug_instance, VS::INSTANCE_FLAG_VISIBLE_IN_ALL_ROOMS, true); + //VisualServer::get_singleton()->instance_geometry_set_flag(contact_3d_debug_instance, VS::INSTANCE_FLAG_VISIBLE_IN_ALL_ROOMS, true); } VS::get_singleton()->viewport_set_active(viewport, true); @@ -500,7 +491,7 @@ void Viewport::_notification(int p_what) { if (physics_object_picking && (to_screen_rect == Rect2() || Input::get_singleton()->get_mouse_mode() != Input::MOUSE_MODE_CAPTURED)) { Vector2 last_pos(1e20, 1e20); - CollisionObject *last_object; + CollisionObject *last_object = NULL; ObjectID last_id = 0; PhysicsDirectSpaceState::RayResult result; Physics2DDirectSpaceState *ss2d = Physics2DServer::get_singleton()->space_get_direct_state(find_world_2d()->get_space()); @@ -552,7 +543,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 +566,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 +586,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; } @@ -618,7 +604,7 @@ void Viewport::_notification(int p_what) { } else if (pos == last_pos) { if (last_id) { - if (ObjectDB::get_instance(last_id)) { + if (ObjectDB::get_instance(last_id) && last_object) { //good, exists last_object->_input_event(camera, ev, result.position, result.normal, result.shape); if (last_object->get_capture_input_on_drag() && mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { @@ -640,18 +626,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 +661,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 +731,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 +742,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 +1010,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 +1034,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 +1047,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()) @@ -1194,44 +1175,7 @@ bool Viewport::is_size_override_stretch_enabled() const { return size_override_stretch; } -#if 0 -void Viewport::set_as_render_target(bool p_enable){ - -/* if (render_target==p_enable) - return; - - render_target=p_enable; - - VS::get_singleton()->viewport_set_as_render_target(viewport,p_enable); - if (is_inside_tree()) { - - if (p_enable) - _vp_exit_tree(); - else - _vp_enter_tree(); - } - - if (p_enable) { - - texture_rid = VS::get_singleton()->viewport_get_texture(viewport); - } else { - - texture_rid=RID(); - } - - texture->set_flags(texture->flags); - texture->emit_changed(); - - update_configuration_warning(); - */ -} - -bool Viewport::is_set_as_render_target() const{ - - return render_target; -} -#endif void Viewport::set_update_mode(UpdateMode p_mode) { update_mode = p_mode; @@ -1241,7 +1185,6 @@ Viewport::UpdateMode Viewport::get_update_mode() const { return update_mode; } -//RID get_texture() const; Ref<ViewportTexture> Viewport::get_texture() const { @@ -1259,15 +1202,15 @@ bool Viewport::get_vflip() const { return vflip; } -void Viewport::set_clear_on_new_frame(bool p_enable) { +void Viewport::set_clear_mode(ClearMode p_mode) { - clear_on_new_frame = p_enable; - //VisualServer::get_singleton()->viewport_set_clear_on_new_frame(viewport,p_enable); + clear_mode = p_mode; + VS::get_singleton()->viewport_set_clear_mode(viewport, VS::ViewportClearMode(p_mode)); } -bool Viewport::get_clear_on_new_frame() const { +Viewport::ClearMode Viewport::get_clear_mode() const { - return clear_on_new_frame; + return clear_mode; } void Viewport::set_shadow_atlas_size(int p_size) { @@ -1303,12 +1246,6 @@ Viewport::ShadowAtlasQuadrantSubdiv Viewport::get_shadow_atlas_quadrant_subdiv(i return shadow_atlas_quadrant_subdiv[p_quadrant]; } -void Viewport::clear() { - - //clear=true; - //VisualServer::get_singleton()->viewport_clear(viewport); -} - Transform2D Viewport::_get_input_pre_xform() const { Transform2D pre_xf; @@ -1514,12 +1451,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 +1529,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 +1557,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 +1586,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 +1711,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 +1832,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 +2177,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 +2207,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 +2382,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 +2508,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."); }*/ @@ -2637,6 +2578,17 @@ int Viewport::get_render_info(RenderInfo p_info) { return VS::get_singleton()->viewport_get_render_info(viewport, VS::ViewportRenderInfo(p_info)); } +void Viewport::set_snap_controls_to_pixels(bool p_enable) { + + snap_controls_to_pixels=p_enable; +} + +bool Viewport::is_snap_controls_to_pixels_enabled() const { + + return snap_controls_to_pixels; +} + + void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_use_arvr", "use"), &Viewport::set_use_arvr); @@ -2678,10 +2630,9 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_vflip", "enable"), &Viewport::set_vflip); ClassDB::bind_method(D_METHOD("get_vflip"), &Viewport::get_vflip); - ClassDB::bind_method(D_METHOD("set_clear_on_new_frame", "enable"), &Viewport::set_clear_on_new_frame); - ClassDB::bind_method(D_METHOD("get_clear_on_new_frame"), &Viewport::get_clear_on_new_frame); + ClassDB::bind_method(D_METHOD("set_clear_mode", "mode"), &Viewport::set_clear_mode); + ClassDB::bind_method(D_METHOD("get_clear_mode"), &Viewport::get_clear_mode); - ClassDB::bind_method(D_METHOD("clear"), &Viewport::clear); ClassDB::bind_method(D_METHOD("set_update_mode", "mode"), &Viewport::set_update_mode); ClassDB::bind_method(D_METHOD("get_update_mode"), &Viewport::get_update_mode); @@ -2740,12 +2691,15 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_shadow_atlas_size", "size"), &Viewport::set_shadow_atlas_size); ClassDB::bind_method(D_METHOD("get_shadow_atlas_size"), &Viewport::get_shadow_atlas_size); + ClassDB::bind_method(D_METHOD("set_snap_controls_to_pixels", "enabled"), &Viewport::set_snap_controls_to_pixels); + ClassDB::bind_method(D_METHOD("is_snap_controls_to_pixels_enabled"), &Viewport::is_snap_controls_to_pixels_enabled); + ClassDB::bind_method(D_METHOD("set_shadow_atlas_quadrant_subdiv", "quadrant", "subdiv"), &Viewport::set_shadow_atlas_quadrant_subdiv); ClassDB::bind_method(D_METHOD("get_shadow_atlas_quadrant_subdiv", "quadrant"), &Viewport::get_shadow_atlas_quadrant_subdiv); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "arvr"), "set_use_arvr", "use_arvr"); - ADD_PROPERTY(PropertyInfo(Variant::RECT2, "size"), "set_size", "get_size"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "own_world"), "set_use_own_world", "is_using_own_world"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world", PROPERTY_HINT_RESOURCE_TYPE, "World"), "set_world", "get_world"); //ADD_PROPERTY( PropertyInfo(Variant::OBJECT,"world_2d",PROPERTY_HINT_RESOURCE_TYPE,"World2D"), "set_world_2d", "get_world_2d") ; @@ -2758,7 +2712,7 @@ void Viewport::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "debug_draw", PROPERTY_HINT_ENUM, "Disabled,Unshaded,Overdraw,Wireframe"), "set_debug_draw", "get_debug_draw"); ADD_GROUP("Render Target", "render_target_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "render_target_v_flip"), "set_vflip", "get_vflip"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "render_target_clear_on_new_frame"), "set_clear_on_new_frame", "get_clear_on_new_frame"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "render_target_clear_mode", PROPERTY_HINT_ENUM, "Always,Never,NextFrame"), "set_clear_mode", "get_clear_mode"); ADD_PROPERTY(PropertyInfo(Variant::INT, "render_target_update_mode", PROPERTY_HINT_ENUM, "Disabled,Once,When Visible,Always"), "set_update_mode", "get_update_mode"); ADD_GROUP("Audio Listener", "audio_listener_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_listener_enable_2d"), "set_as_audio_listener_2d", "is_audio_listener_2d"); @@ -2767,6 +2721,7 @@ void Viewport::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "physics_object_picking"), "set_physics_object_picking", "get_physics_object_picking"); ADD_GROUP("GUI", "gui_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gui_disable_input"), "set_disable_input", "is_input_disabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "gui_snap_controls_to_pixels"), "set_snap_controls_to_pixels", "is_snap_controls_to_pixels_enabled"); ADD_GROUP("Shadow Atlas", "shadow_atlas_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "shadow_atlas_size"), "set_shadow_atlas_size", "get_shadow_atlas_size"); ADD_PROPERTYI(PropertyInfo(Variant::INT, "shadow_atlas_quad_0", PROPERTY_HINT_ENUM, "Disabled,1 Shadow,4 Shadows,16 Shadows,64 Shadows,256 Shadows,1024 Shadows"), "set_shadow_atlas_quadrant_subdiv", "get_shadow_atlas_quadrant_subdiv", 0); @@ -2837,7 +2792,7 @@ Viewport::Viewport() { gen_mipmaps = false; vflip = false; - clear_on_new_frame = true; + //clear=true; update_mode = UPDATE_WHEN_VISIBLE; @@ -2881,6 +2836,9 @@ Viewport::Viewport() { usage = USAGE_3D; debug_draw = DEBUG_DRAW_DISABLED; + clear_mode = CLEAR_MODE_ALWAYS; + + snap_controls_to_pixels = true; } Viewport::~Viewport() { diff --git a/scene/main/viewport.h b/scene/main/viewport.h index 83c989db54..6bbd4b26b5 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -1,9 +1,10 @@ + /*************************************************************************/ /* viewport.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -140,6 +141,13 @@ public: DEBUG_DRAW_WIREFRAME, }; + enum ClearMode { + + CLEAR_MODE_ALWAYS, + CLEAR_MODE_NEVER, + CLEAR_MODE_ONLY_NEXT_FRAME + }; + private: friend class ViewportTexture; @@ -182,10 +190,12 @@ private: bool transparent_bg; bool vflip; - bool clear_on_new_frame; + ClearMode clear_mode; bool filter; bool gen_mipmaps; + bool snap_controls_to_pixels; + bool physics_object_picking; List<Ref<InputEvent> > physics_picking_events; ObjectID physics_object_capture; @@ -395,9 +405,8 @@ public: void set_vflip(bool p_enable); bool get_vflip() const; - void set_clear_on_new_frame(bool p_enable); - bool get_clear_on_new_frame() const; - void clear(); + void set_clear_mode(ClearMode p_mode); + ClearMode get_clear_mode() const; void set_update_mode(UpdateMode p_mode); UpdateMode get_update_mode() const; @@ -457,6 +466,9 @@ public: int get_render_info(RenderInfo p_info); + void set_snap_controls_to_pixels(bool p_enable); + bool is_snap_controls_to_pixels_enabled() const; + Viewport(); ~Viewport(); }; @@ -466,6 +478,7 @@ VARIANT_ENUM_CAST(Viewport::ShadowAtlasQuadrantSubdiv); VARIANT_ENUM_CAST(Viewport::MSAA); VARIANT_ENUM_CAST(Viewport::Usage); VARIANT_ENUM_CAST(Viewport::DebugDraw); +VARIANT_ENUM_CAST(Viewport::ClearMode); VARIANT_ENUM_CAST(Viewport::RenderInfo); #endif diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index 3e6d80d314..9ed3734a36 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,22 +28,44 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "register_scene_types.h" -#include "os/os.h" -#include "project_settings.h" -#include "scene/io/resource_format_image.h" -#include "scene/io/resource_format_wav.h" - -//#include "scene/io/scene_format_script.h" -#include "class_db.h" -#include "resources/default_theme/default_theme.h" + +#include "core/class_db.h" +#include "core/os/os.h" +#include "core/project_settings.h" +#include "scene/2d/animated_sprite.h" +#include "scene/2d/area_2d.h" +#include "scene/2d/audio_stream_player_2d.h" +#include "scene/2d/back_buffer_copy.h" +#include "scene/2d/camera_2d.h" +#include "scene/2d/canvas_item.h" +#include "scene/2d/canvas_modulate.h" +#include "scene/2d/collision_polygon_2d.h" +#include "scene/2d/collision_shape_2d.h" +#include "scene/2d/joints_2d.h" #include "scene/2d/light_2d.h" #include "scene/2d/light_occluder_2d.h" +#include "scene/2d/line_2d.h" +#include "scene/2d/navigation2d.h" +#include "scene/2d/parallax_background.h" +#include "scene/2d/parallax_layer.h" #include "scene/2d/particles_2d.h" #include "scene/2d/path_2d.h" +#include "scene/2d/physics_body_2d.h" +#include "scene/2d/polygon_2d.h" +#include "scene/2d/position_2d.h" +#include "scene/2d/ray_cast_2d.h" +#include "scene/2d/remote_transform_2d.h" +#include "scene/2d/screen_button.h" +#include "scene/2d/sprite.h" +#include "scene/2d/tile_map.h" +#include "scene/2d/visibility_notifier_2d.h" +#include "scene/2d/y_sort.h" +#include "scene/animation/animation_player.h" +#include "scene/animation/animation_tree_player.h" +#include "scene/animation/tween.h" +#include "scene/audio/audio_player.h" #include "scene/gui/box_container.h" #include "scene/gui/button.h" - -#include "scene/gui/button_group.h" #include "scene/gui/center_container.h" #include "scene/gui/check_box.h" #include "scene/gui/check_button.h" @@ -88,154 +110,85 @@ #include "scene/main/canvas_layer.h" #include "scene/main/http_request.h" #include "scene/main/instance_placeholder.h" -#include "scene/main/viewport.h" -#include "scene/resources/audio_stream_sample.h" -#include "scene/resources/video_stream.h" - -#include "scene/2d/animated_sprite.h" -#include "scene/2d/back_buffer_copy.h" -#include "scene/2d/canvas_item.h" -#include "scene/2d/polygon_2d.h" -#include "scene/2d/sprite.h" - -#include "scene/2d/visibility_notifier_2d.h" - -#include "scene/2d/area_2d.h" -#include "scene/2d/camera_2d.h" -#include "scene/2d/collision_polygon_2d.h" -#include "scene/2d/collision_shape_2d.h" -#include "scene/2d/joints_2d.h" -#include "scene/2d/parallax_background.h" -#include "scene/2d/parallax_layer.h" -#include "scene/2d/physics_body_2d.h" -#include "scene/2d/ray_cast_2d.h" -//#include "scene/2d/sound_player_2d.h" -//#include "scene/2d/sample_player_2d.h" -#include "scene/2d/audio_stream_player_2d.h" -#include "scene/2d/canvas_modulate.h" -#include "scene/2d/navigation2d.h" -#include "scene/2d/remote_transform_2d.h" -#include "scene/2d/screen_button.h" -#include "scene/2d/y_sort.h" - -#include "scene/2d/position_2d.h" -#include "scene/2d/tile_map.h" -//#include "scene/2d/tile_map.h" -#include "scene/2d/line_2d.h" - -#include "scene/resources/tile_set.h" - -#include "scene/animation/animation_player.h" -#include "scene/animation/animation_tree_player.h" -#include "scene/animation/tween.h" #include "scene/main/resource_preloader.h" #include "scene/main/scene_tree.h" -#include "scene/resources/packed_scene.h" - -#include "scene/resources/mesh_data_tool.h" -#include "scene/resources/surface_tool.h" - -#include "scene/resources/dynamic_font.h" -#include "scene/resources/dynamic_font_stb.h" - #include "scene/main/timer.h" - -#include "scene/audio/audio_player.h" -//#include "scene/audio/event_player.h" -//#include "scene/audio/sound_room_params.h" +#include "scene/main/viewport.h" +#include "scene/resources/audio_stream_sample.h" +#include "scene/resources/bit_mask.h" #include "scene/resources/box_shape.h" #include "scene/resources/capsule_shape.h" -#include "scene/resources/concave_polygon_shape.h" -#include "scene/resources/convex_polygon_shape.h" -#include "scene/resources/plane_shape.h" -#include "scene/resources/ray_shape.h" -#include "scene/resources/sphere_shape.h" - #include "scene/resources/capsule_shape_2d.h" #include "scene/resources/circle_shape_2d.h" +#include "scene/resources/color_ramp.h" +#include "scene/resources/concave_polygon_shape.h" #include "scene/resources/concave_polygon_shape_2d.h" +#include "scene/resources/convex_polygon_shape.h" #include "scene/resources/convex_polygon_shape_2d.h" +#include "scene/resources/default_theme/default_theme.h" +#include "scene/resources/dynamic_font.h" +#include "scene/resources/dynamic_font_stb.h" +#include "scene/resources/material.h" +#include "scene/resources/mesh.h" +#include "scene/resources/mesh_data_tool.h" +#include "scene/resources/mesh_library.h" +#include "scene/resources/packed_scene.h" +#include "scene/resources/plane_shape.h" +#include "scene/resources/polygon_path_finder.h" +#include "scene/resources/primitive_meshes.h" +#include "scene/resources/ray_shape.h" #include "scene/resources/rectangle_shape_2d.h" +#include "scene/resources/scene_format_text.h" #include "scene/resources/segment_shape_2d.h" +#include "scene/resources/shader_graph.h" #include "scene/resources/shape_line_2d.h" - -#include "scene/resources/mesh_library.h" - -#include "scene/resources/polygon_path_finder.h" - -//#include "scene/resources/sample.h" -#include "scene/3d/audio_stream_player_3d.h" -#include "scene/resources/material.h" -#include "scene/resources/mesh.h" -#include "scene/resources/room.h" #include "scene/resources/sky_box.h" +#include "scene/resources/sphere_shape.h" +#include "scene/resources/surface_tool.h" #include "scene/resources/texture.h" - -#include "scene/resources/primitive_meshes.h" - -#include "scene/resources/shader_graph.h" - +#include "scene/resources/tile_set.h" +#include "scene/resources/video_stream.h" #include "scene/resources/world.h" #include "scene/resources/world_2d.h" - -//#include "scene/resources/sample_library.h" -//#include "scene/resources/audio_stream.h" -#include "scene/resources/bit_mask.h" -#include "scene/resources/color_ramp.h" -#include "scene/resources/gibberish_stream.h" #include "scene/scene_string_names.h" -#include "scene/3d/bone_attachment.h" -#include "scene/3d/path.h" -#include "scene/3d/remote_transform.h" -#include "scene/3d/room_instance.h" -#include "scene/3d/scenario_fx.h" -#include "scene/3d/skeleton.h" -#include "scene/3d/spatial.h" - -#include "scene/3d/visibility_notifier.h" - #ifndef _3D_DISABLED -#include "scene/3d/camera.h" -#include "scene/3d/listener.h" - +#include "scene/3d/area.h" #include "scene/3d/arvr_nodes.h" - +#include "scene/3d/audio_stream_player_3d.h" +#include "scene/3d/bone_attachment.h" +#include "scene/3d/camera.h" +#include "scene/3d/collision_polygon.h" +#include "scene/3d/collision_shape.h" #include "scene/3d/gi_probe.h" +#include "scene/3d/immediate_geometry.h" #include "scene/3d/interpolated_camera.h" #include "scene/3d/light.h" +#include "scene/3d/listener.h" #include "scene/3d/mesh_instance.h" +#include "scene/3d/multimesh_instance.h" +#include "scene/3d/navigation.h" +#include "scene/3d/navigation_mesh.h" #include "scene/3d/particles.h" +#include "scene/3d/path.h" #include "scene/3d/physics_body.h" +#include "scene/3d/physics_joint.h" #include "scene/3d/portal.h" #include "scene/3d/position_3d.h" -#include "scene/3d/reflection_probe.h" -#include "scene/resources/environment.h" - -#include "scene/3d/area.h" - -#include "scene/3d/collision_shape.h" -#include "scene/3d/immediate_geometry.h" -#include "scene/3d/multimesh_instance.h" -#include "scene/3d/physics_joint.h" +#include "scene/3d/proximity_group.h" #include "scene/3d/ray_cast.h" +#include "scene/3d/reflection_probe.h" +#include "scene/3d/remote_transform.h" +#include "scene/3d/room_instance.h" +#include "scene/3d/scenario_fx.h" +#include "scene/3d/skeleton.h" +#include "scene/3d/spatial.h" #include "scene/3d/sprite_3d.h" #include "scene/3d/vehicle_body.h" -//#include "scene/3d/spatial_sample_player.h" -//#include "scene/3d/spatial_stream_player.h" -#include "scene/3d/collision_polygon.h" -#include "scene/3d/navigation.h" -#include "scene/3d/navigation_mesh.h" -#include "scene/3d/proximity_group.h" +#include "scene/3d/visibility_notifier.h" +#include "scene/resources/environment.h" #endif -#include "scene/resources/scene_format_text.h" - -//static ResourceFormatLoaderWAV *resource_loader_wav=NULL; - -#ifdef TOOLS_ENABLED - -#endif static ResourceFormatLoaderTheme *resource_loader_theme = NULL; static ResourceFormatSaverText *resource_saver_text = NULL; @@ -245,8 +198,6 @@ static ResourceFormatLoaderDynamicFont *resource_loader_dynamic_font = NULL; static ResourceFormatLoaderStreamTexture *resource_loader_stream_texture = NULL; -//static SceneStringNames *string_names; - void register_scene_types() { SceneStringNames::create(); @@ -255,20 +206,12 @@ void register_scene_types() { Node::init_node_hrcr(); - //resource_loader_wav = memnew( ResourceFormatLoaderWAV ); - //ResourceLoader::add_resource_format_loader( resource_loader_wav ); resource_loader_dynamic_font = memnew(ResourceFormatLoaderDynamicFont); ResourceLoader::add_resource_format_loader(resource_loader_dynamic_font); resource_loader_stream_texture = memnew(ResourceFormatLoaderStreamTexture); ResourceLoader::add_resource_format_loader(resource_loader_stream_texture); -#ifdef TOOLS_ENABLED - -//scene first! - -#endif - resource_loader_theme = memnew(ResourceFormatLoaderTheme); ResourceLoader::add_resource_format_loader(resource_loader_theme); @@ -316,7 +259,6 @@ void register_scene_types() { ClassDB::register_class<ShortCut>(); ClassDB::register_class<Control>(); - //ClassDB::register_type<EmptyControl>(); ClassDB::register_class<Button>(); ClassDB::register_class<Label>(); ClassDB::register_class<HScrollBar>(); @@ -424,7 +366,6 @@ void register_scene_types() { ClassDB::register_class<GIProbe>(); ClassDB::register_class<GIProbeData>(); ClassDB::register_class<AnimationTreePlayer>(); - ClassDB::register_class<Portal>(); ClassDB::register_class<Particles>(); ClassDB::register_class<Position3D>(); ClassDB::register_class<NavigationMeshInstance>(); @@ -436,6 +377,7 @@ void register_scene_types() { ClassDB::register_virtual_class<CollisionObject>(); ClassDB::register_class<StaticBody>(); ClassDB::register_class<RigidBody>(); + ClassDB::register_class<KinematicCollision>(); ClassDB::register_class<KinematicBody>(); ClassDB::register_class<VehicleBody>(); @@ -446,14 +388,12 @@ void register_scene_types() { ClassDB::register_class<CollisionPolygon>(); ClassDB::register_class<RayCast>(); ClassDB::register_class<MultiMeshInstance>(); - ClassDB::register_class<Room>(); + ClassDB::register_class<Curve3D>(); ClassDB::register_class<Path>(); ClassDB::register_class<PathFollow>(); ClassDB::register_class<VisibilityNotifier>(); ClassDB::register_class<VisibilityEnabler>(); - // ClassDB::register_class<BakedLight>(); - //ClassDB::register_type<BakedLightSampler>(); ClassDB::register_class<WorldEnvironment>(); ClassDB::register_class<RemoteTransform>(); @@ -464,8 +404,6 @@ void register_scene_types() { ClassDB::register_class<ConeTwistJoint>(); ClassDB::register_class<Generic6DOFJoint>(); - //scenariofx - OS::get_singleton()->yield(); //may take time to init #endif @@ -545,8 +483,6 @@ void register_scene_types() { SceneTree::add_idle_callback(ParticlesMaterial::flush_changes); ParticlesMaterial::init_shaders(); - //ClassDB::register_type<ShaderMaterial>(); - ClassDB::register_class<RoomBounds>(); ClassDB::register_class<MultiMesh>(); ClassDB::register_class<MeshLibrary>(); @@ -562,7 +498,6 @@ void register_scene_types() { ClassDB::register_class<SurfaceTool>(); ClassDB::register_class<MeshDataTool>(); - //ClassDB::register_type<BakedLight>(); OS::get_singleton()->yield(); //may take time to init @@ -661,14 +596,8 @@ void unregister_scene_types() { clear_default_theme(); - // memdelete( resource_loader_wav ); memdelete(resource_loader_dynamic_font); memdelete(resource_loader_stream_texture); - -#ifdef TOOLS_ENABLED - -#endif - memdelete(resource_loader_theme); if (resource_saver_text) { diff --git a/scene/register_scene_types.h b/scene/register_scene_types.h index dee0af9063..956b12a7cd 100644 --- a/scene/register_scene_types.h +++ b/scene/register_scene_types.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 8878e59e71..eae95d9247 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "animation.h" + #include "geometry.h" bool Animation::_set(const StringName &p_name, const Variant &p_value) { @@ -83,44 +84,6 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) { TransformTrack *tt = static_cast<TransformTrack *>(tracks[track]); PoolVector<float> values = p_value; int vcount = values.size(); - -#if 0 // old compatibility hack - if ((vcount%11) == 0) { - - - PoolVector<float>::Read r = values.read(); - - tt->transforms.resize(vcount/11); - - - for(int i=0;i<(vcount/11);i++) { - - - TKey<TransformKey> &tk=tt->transforms[i]; - const float *ofs=&r[i*11]; - tk.time=ofs[0]; - - tk.value.loc.x=ofs[1]; - tk.value.loc.y=ofs[2]; - tk.value.loc.z=ofs[3]; - - tk.value.rot.x=ofs[4]; - tk.value.rot.y=ofs[5]; - tk.value.rot.z=ofs[6]; - tk.value.rot.w=ofs[7]; - - tk.value.scale.x=ofs[8]; - tk.value.scale.y=ofs[9]; - tk.value.scale.z=ofs[10]; - - - } - return true; - - - - } -#endif ERR_FAIL_COND_V(vcount % 12, false); // shuld be multiple of 11 PoolVector<float>::Read r = values.read(); @@ -1007,7 +970,12 @@ int Animation::_find(const Vector<K> &p_keys, float p_time) const { int low = 0; int high = len - 1; - int middle; + int middle = 0; + +#if DEBUG_ENABLED + if (low > high) + ERR_PRINT("low > high, this may be a bug"); +#endif const K *keys = &p_keys[0]; @@ -1326,7 +1294,7 @@ Error Animation::transform_track_interpolate(int p_track, float p_time, Vector3 TransformTrack *tt = static_cast<TransformTrack *>(t); - bool ok; + bool ok = false; TransformKey tk = _interpolate(tt->transforms, p_time, tt->interpolation, tt->loop_wrap, &ok); @@ -1352,7 +1320,7 @@ Variant Animation::value_track_interpolate(int p_track, float p_time) const { ERR_FAIL_COND_V(t->type != TYPE_VALUE, Variant()); ValueTrack *vt = static_cast<ValueTrack *>(t); - bool ok; + bool ok = false; Variant res = _interpolate(vt->values, p_time, vt->update_mode == UPDATE_CONTINUOUS ? vt->interpolation : INTERPOLATION_NEAREST, vt->loop_wrap, &ok); diff --git a/scene/resources/animation.h b/scene/resources/animation.h index 27c58aba8c..e653f6b124 100644 --- a/scene/resources/animation.h +++ b/scene/resources/animation.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/audio_stream_resampled.cpp b/scene/resources/audio_stream_resampled.cpp deleted file mode 100644 index 1b1d6f8587..0000000000 --- a/scene/resources/audio_stream_resampled.cpp +++ /dev/null @@ -1,388 +0,0 @@ -/*************************************************************************/ -/* audio_stream_resampled.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#include "audio_stream_resampled.h" -#include "project_settings.h" - -#if 0 -int AudioStreamResampled::get_channel_count() const { - - if (!rb) - return 0; - - return channels; -} - - -template<int C> -uint32_t AudioStreamResampled::_resample(int32_t *p_dest,int p_todo,int32_t p_increment) { - - uint32_t read=offset&MIX_FRAC_MASK; - - for (int i=0;i<p_todo;i++) { - - offset = (offset + p_increment)&(((1<<(rb_bits+MIX_FRAC_BITS))-1)); - read+=p_increment; - uint32_t pos = offset >> MIX_FRAC_BITS; - uint32_t frac = offset & MIX_FRAC_MASK; -#ifndef FAST_AUDIO - ERR_FAIL_COND_V(pos>=rb_len,0); -#endif - uint32_t pos_next = (pos+1)&rb_mask; - //printf("rb pos %i\n",pos); - - // since this is a template with a known compile time value (C), conditionals go away when compiling. - if (C==1) { - - int32_t v0 = rb[pos]; - int32_t v0n=rb[pos_next]; -#ifndef FAST_AUDIO - v0+=(v0n-v0)*(int32_t)frac >> MIX_FRAC_BITS; -#endif - v0<<=16; - p_dest[i]=v0; - - } - if (C==2) { - - int32_t v0 = rb[(pos<<1)+0]; - int32_t v1 = rb[(pos<<1)+1]; - int32_t v0n=rb[(pos_next<<1)+0]; - int32_t v1n=rb[(pos_next<<1)+1]; - -#ifndef FAST_AUDIO - v0+=(v0n-v0)*(int32_t)frac >> MIX_FRAC_BITS; - v1+=(v1n-v1)*(int32_t)frac >> MIX_FRAC_BITS; -#endif - v0<<=16; - v1<<=16; - p_dest[(i<<1)+0]=v0; - p_dest[(i<<1)+1]=v1; - - } - - if (C==4) { - - int32_t v0 = rb[(pos<<2)+0]; - int32_t v1 = rb[(pos<<2)+1]; - int32_t v2 = rb[(pos<<2)+2]; - int32_t v3 = rb[(pos<<2)+3]; - int32_t v0n = rb[(pos_next<<2)+0]; - int32_t v1n=rb[(pos_next<<2)+1]; - int32_t v2n=rb[(pos_next<<2)+2]; - int32_t v3n=rb[(pos_next<<2)+3]; - -#ifndef FAST_AUDIO - v0+=(v0n-v0)*(int32_t)frac >> MIX_FRAC_BITS; - v1+=(v1n-v1)*(int32_t)frac >> MIX_FRAC_BITS; - v2+=(v2n-v2)*(int32_t)frac >> MIX_FRAC_BITS; - v3+=(v3n-v3)*(int32_t)frac >> MIX_FRAC_BITS; -#endif - v0<<=16; - v1<<=16; - v2<<=16; - v3<<=16; - p_dest[(i<<2)+0]=v0; - p_dest[(i<<2)+1]=v1; - p_dest[(i<<2)+2]=v2; - p_dest[(i<<2)+3]=v3; - - } - - if (C==6) { - - int32_t v0 = rb[(pos*6)+0]; - int32_t v1 = rb[(pos*6)+1]; - int32_t v2 = rb[(pos*6)+2]; - int32_t v3 = rb[(pos*6)+3]; - int32_t v4 = rb[(pos*6)+4]; - int32_t v5 = rb[(pos*6)+5]; - int32_t v0n = rb[(pos_next*6)+0]; - int32_t v1n=rb[(pos_next*6)+1]; - int32_t v2n=rb[(pos_next*6)+2]; - int32_t v3n=rb[(pos_next*6)+3]; - int32_t v4n=rb[(pos_next*6)+4]; - int32_t v5n=rb[(pos_next*6)+5]; - -#ifndef FAST_AUDIO - v0+=(v0n-v0)*(int32_t)frac >> MIX_FRAC_BITS; - v1+=(v1n-v1)*(int32_t)frac >> MIX_FRAC_BITS; - v2+=(v2n-v2)*(int32_t)frac >> MIX_FRAC_BITS; - v3+=(v3n-v3)*(int32_t)frac >> MIX_FRAC_BITS; - v4+=(v4n-v4)*(int32_t)frac >> MIX_FRAC_BITS; - v5+=(v5n-v5)*(int32_t)frac >> MIX_FRAC_BITS; -#endif - v0<<=16; - v1<<=16; - v2<<=16; - v3<<=16; - v4<<=16; - v5<<=16; - p_dest[(i*6)+0]=v0; - p_dest[(i*6)+1]=v1; - p_dest[(i*6)+2]=v2; - p_dest[(i*6)+3]=v3; - p_dest[(i*6)+4]=v4; - p_dest[(i*6)+5]=v5; - - } - - - } - - - return read>>MIX_FRAC_BITS;//rb_read_pos=offset>>MIX_FRAC_BITS; - -} - - -bool AudioStreamResampled::mix(int32_t *p_dest, int p_frames) { - - - if (!rb || !_can_mix()) - return false; - - int write_pos_cache=rb_write_pos; - - int32_t increment=(mix_rate*MIX_FRAC_LEN)/get_mix_rate(); - - int rb_todo; - - if (write_pos_cache==rb_read_pos) { - return false; //out of buffer - - } else if (rb_read_pos<write_pos_cache) { - - rb_todo=write_pos_cache-rb_read_pos; //-1? - } else { - - rb_todo=(rb_len-rb_read_pos)+write_pos_cache; //-1? - } - - int todo = MIN( ((int64_t(rb_todo)<<MIX_FRAC_BITS)/increment)+1, p_frames ); -#if 0 - if (int(mix_rate)==get_mix_rate()) { - - - if (channels==6) { - - for(int i=0;i<p_frames;i++) { - - int from = ((rb_read_pos+i)&rb_mask)*6; - int to = i*6; - - p_dest[from+0]=int32_t(rb[to+0])<<16; - p_dest[from+1]=int32_t(rb[to+1])<<16; - p_dest[from+2]=int32_t(rb[to+2])<<16; - p_dest[from+3]=int32_t(rb[to+3])<<16; - p_dest[from+4]=int32_t(rb[to+4])<<16; - p_dest[from+5]=int32_t(rb[to+5])<<16; - } - - } else { - int len=p_frames*channels; - int from=rb_read_pos*channels; - int mask=0; - switch(channels) { - case 1: mask=rb_len-1; break; - case 2: mask=(rb_len*2)-1; break; - case 4: mask=(rb_len*4)-1; break; - } - - for(int i=0;i<len;i++) { - - p_dest[i]=int32_t(rb[(from+i)&mask])<<16; - } - } - - rb_read_pos = (rb_read_pos+p_frames)&rb_mask; - } else -#endif - { - - uint32_t read=0; - switch(channels) { - case 1: read=_resample<1>(p_dest,todo,increment); break; - case 2: read=_resample<2>(p_dest,todo,increment); break; - case 4: read=_resample<4>(p_dest,todo,increment); break; - case 6: read=_resample<6>(p_dest,todo,increment); break; - } -#if 1 - //end of stream, fadeout - int remaining = p_frames-todo; - if (remaining && todo>0) { - - //print_line("fadeout"); - for(int c=0;c<channels;c++) { - - for(int i=0;i<todo;i++) { - - int32_t samp = p_dest[i*channels+c]>>8; - uint32_t mul = (todo-i) * 256 /todo; - //print_line("mul: "+itos(i)+" "+itos(mul)); - p_dest[i*channels+c]=samp*mul; - } - - } - - } - -#else - int remaining = p_frames-todo; - if (remaining && todo>0) { - - - for(int c=0;c<channels;c++) { - - int32_t from = p_dest[(todo-1)*channels+c]>>8; - - for(int i=0;i<remaining;i++) { - - uint32_t mul = (remaining-i) * 256 /remaining; - p_dest[(todo+i)*channels+c]=from*mul; - } - - } - - } -#endif - - //zero out what remains there to avoid glitches - for(int i=todo*channels;i<int(p_frames)*channels;i++) { - - p_dest[i]=0; - } - - if (read>rb_todo) - read=rb_todo; - - rb_read_pos = (rb_read_pos+read)&rb_mask; - - - - - } - - return true; -} - - -Error AudioStreamResampled::_setup(int p_channels,int p_mix_rate,int p_minbuff_needed) { - - ERR_FAIL_COND_V(p_channels!=1 && p_channels!=2 && p_channels!=4 && p_channels!=6,ERR_INVALID_PARAMETER); - - - float buffering_sec = int(GLOBAL_DEF("audio/stream_buffering_ms",500))/1000.0; - int desired_rb_bits =nearest_shift(MAX(buffering_sec*p_mix_rate,p_minbuff_needed)); - - bool recreate=!rb; - - if (rb && (uint32_t(desired_rb_bits)!=rb_bits || channels!=uint32_t(p_channels))) { - //recreate - - memdelete_arr(rb); - memdelete_arr(read_buf); - recreate=true; - - } - - if (recreate) { - - channels=p_channels; - rb_bits=desired_rb_bits; - rb_len=(1<<rb_bits); - rb_mask=rb_len-1; - rb = memnew_arr( int16_t, rb_len * p_channels ); - read_buf = memnew_arr( int16_t, rb_len * p_channels ); - - } - - mix_rate=p_mix_rate; - offset=0; - rb_read_pos=0; - rb_write_pos=0; - - //avoid maybe strange noises upon load - for (int i=0;i<(rb_len*channels);i++) { - - rb[i]=0; - read_buf[i]=0; - } - - return OK; - -} - -void AudioStreamResampled::_clear() { - - if (!rb) - return; - - AudioServer::get_singleton()->lock(); - //should be stopped at this point but just in case - if (rb) { - memdelete_arr(rb); - memdelete_arr(read_buf); - } - rb=NULL; - offset=0; - rb_read_pos=0; - rb_write_pos=0; - read_buf=NULL; - AudioServer::get_singleton()->unlock(); - -} - -AudioStreamResampled::AudioStreamResampled() { - - rb=NULL; - offset=0; - read_buf=NULL; - rb_read_pos=0; - rb_write_pos=0; - - rb_bits=0; - rb_len=0; - rb_mask=0; - read_buff_len=0; - channels=0; - mix_rate=0; - -} - -AudioStreamResampled::~AudioStreamResampled() { - - if (rb) { - memdelete_arr(rb); - memdelete_arr(read_buf); - } - -} - -#endif diff --git a/scene/resources/audio_stream_resampled.h b/scene/resources/audio_stream_resampled.h deleted file mode 100644 index 53fa3bd0b9..0000000000 --- a/scene/resources/audio_stream_resampled.h +++ /dev/null @@ -1,166 +0,0 @@ -/*************************************************************************/ -/* audio_stream_resampled.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef AUDIO_STREAM_RESAMPLED_H -#define AUDIO_STREAM_RESAMPLED_H - -//#include "scene/resources/audio_stream.h" - -#if 0 - -class AudioStreamResampled : public AudioStream { - GDCLASS(AudioStreamResampled,AudioStream); - - uint32_t rb_bits; - uint32_t rb_len; - uint32_t rb_mask; - uint32_t read_buff_len; - uint32_t channels; - uint32_t mix_rate; - - volatile int rb_read_pos; - volatile int rb_write_pos; - - int32_t offset; //contains the fractional remainder of the resampler - enum { - MIX_FRAC_BITS=13, - MIX_FRAC_LEN=(1<<MIX_FRAC_BITS), - MIX_FRAC_MASK=MIX_FRAC_LEN-1, - }; - - int16_t *read_buf; - int16_t *rb; - - - template<int C> - uint32_t _resample(int32_t *p_dest,int p_todo,int32_t p_increment); - - -protected: - - _FORCE_INLINE_ int get_total() const { - - return rb_len; - } - - _FORCE_INLINE_ int get_todo() const { //return amount of frames to mix - - int todo; - int read_pos_cache=rb_read_pos; - - if (read_pos_cache==rb_write_pos) { - todo=rb_len-1; - } else if (read_pos_cache>rb_write_pos) { - - todo=read_pos_cache-rb_write_pos-1; - } else { - - todo=(rb_len-rb_write_pos)+read_pos_cache-1; - } - - return todo; - } - - //Stream virtual funcs - virtual int get_channel_count() const; - virtual bool mix(int32_t *p_dest, int p_frames); - - _FORCE_INLINE_ void _flush() { - rb_read_pos=0; - rb_write_pos=0; - } - - _FORCE_INLINE_ int16_t *get_write_buffer() { return read_buf; } - _FORCE_INLINE_ void write(uint32_t p_frames) { - - ERR_FAIL_COND(p_frames >= rb_len); - - switch(channels) { - case 1: { - - for(uint32_t i=0;i<p_frames;i++) { - - rb[ rb_write_pos ] = read_buf[i]; - rb_write_pos=(rb_write_pos+1)&rb_mask; - } - } break; - case 2: { - - for(uint32_t i=0;i<p_frames;i++) { - - rb[ (rb_write_pos<<1)+0 ] = read_buf[(i<<1)+0]; - rb[ (rb_write_pos<<1)+1 ] = read_buf[(i<<1)+1]; - rb_write_pos=(rb_write_pos+1)&rb_mask; - } - } break; - case 4: { - - for(uint32_t i=0;i<p_frames;i++) { - - rb[ (rb_write_pos<<2)+0 ] = read_buf[(i<<2)+0]; - rb[ (rb_write_pos<<2)+1 ] = read_buf[(i<<2)+1]; - rb[ (rb_write_pos<<2)+2 ] = read_buf[(i<<2)+2]; - rb[ (rb_write_pos<<2)+3 ] = read_buf[(i<<2)+3]; - rb_write_pos=(rb_write_pos+1)&rb_mask; - } - } break; - case 6: { - - for(uint32_t i=0;i<p_frames;i++) { - - rb[ (rb_write_pos*6)+0 ] = read_buf[(i*6)+0]; - rb[ (rb_write_pos*6)+1 ] = read_buf[(i*6)+1]; - rb[ (rb_write_pos*6)+2 ] = read_buf[(i*6)+2]; - rb[ (rb_write_pos*6)+3 ] = read_buf[(i*6)+3]; - rb[ (rb_write_pos*6)+4 ] = read_buf[(i*6)+4]; - rb[ (rb_write_pos*6)+5 ] = read_buf[(i*6)+5]; - rb_write_pos=(rb_write_pos+1)&rb_mask; - } - } break; - - - } - - } - - virtual bool _can_mix() const =0; - - _FORCE_INLINE_ bool _is_ready() const{ - return rb!=NULL; - } - - Error _setup(int p_channels,int p_mix_rate,int p_minbuff_needed=-1); - void _clear(); - -public: - AudioStreamResampled(); - ~AudioStreamResampled(); -}; -#endif -#endif // AUDIO_STREAM_RESAMPLED_H diff --git a/scene/resources/audio_stream_sample.cpp b/scene/resources/audio_stream_sample.cpp index c8f6007e60..659322897a 100644 --- a/scene/resources/audio_stream_sample.cpp +++ b/scene/resources/audio_stream_sample.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/audio_stream_sample.h b/scene/resources/audio_stream_sample.h index 680f037f15..6cb255fedf 100644 --- a/scene/resources/audio_stream_sample.h +++ b/scene/resources/audio_stream_sample.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/bit_mask.cpp b/scene/resources/bit_mask.cpp index a473067937..be994e3b33 100644 --- a/scene/resources/bit_mask.cpp +++ b/scene/resources/bit_mask.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/bit_mask.h b/scene/resources/bit_mask.h index 5ab7a3134d..72090f2ebe 100644 --- a/scene/resources/bit_mask.h +++ b/scene/resources/bit_mask.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/bounds.cpp b/scene/resources/bounds.cpp index b088426013..ee1e750c82 100644 --- a/scene/resources/bounds.cpp +++ b/scene/resources/bounds.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/bounds.h b/scene/resources/bounds.h index 8c0d1dcf6e..3378101836 100644 --- a/scene/resources/bounds.h +++ b/scene/resources/bounds.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/box_shape.cpp b/scene/resources/box_shape.cpp index d5c25b718e..bbc85ce0f6 100644 --- a/scene/resources/box_shape.cpp +++ b/scene/resources/box_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/box_shape.h b/scene/resources/box_shape.h index fdf1e98020..8884c9b75a 100644 --- a/scene/resources/box_shape.h +++ b/scene/resources/box_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/canvas.cpp b/scene/resources/canvas.cpp index b6a909f3fa..f5bf0ad78e 100644 --- a/scene/resources/canvas.cpp +++ b/scene/resources/canvas.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/canvas.h b/scene/resources/canvas.h index 331a997914..b9977e11b9 100644 --- a/scene/resources/canvas.h +++ b/scene/resources/canvas.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/capsule_shape.cpp b/scene/resources/capsule_shape.cpp index 1fcc9da5b6..e11b98f82e 100644 --- a/scene/resources/capsule_shape.cpp +++ b/scene/resources/capsule_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/capsule_shape.h b/scene/resources/capsule_shape.h index 2864e7e23f..9b43823c83 100644 --- a/scene/resources/capsule_shape.h +++ b/scene/resources/capsule_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/capsule_shape_2d.cpp b/scene/resources/capsule_shape_2d.cpp index 20177692a1..56a09bc3bf 100644 --- a/scene/resources/capsule_shape_2d.cpp +++ b/scene/resources/capsule_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/capsule_shape_2d.h b/scene/resources/capsule_shape_2d.h index 93e7d846a4..610f9a4cf9 100644 --- a/scene/resources/capsule_shape_2d.h +++ b/scene/resources/capsule_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/circle_shape_2d.cpp b/scene/resources/circle_shape_2d.cpp index 1b7e09ddfb..ecfc98ea60 100644 --- a/scene/resources/circle_shape_2d.cpp +++ b/scene/resources/circle_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/circle_shape_2d.h b/scene/resources/circle_shape_2d.h index a4a4601e66..3ba5ec949c 100644 --- a/scene/resources/circle_shape_2d.h +++ b/scene/resources/circle_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/color_ramp.cpp b/scene/resources/color_ramp.cpp index 68f707220f..9f6150ae63 100644 --- a/scene/resources/color_ramp.cpp +++ b/scene/resources/color_ramp.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/color_ramp.h b/scene/resources/color_ramp.h index d9f14205bb..316c188d59 100644 --- a/scene/resources/color_ramp.h +++ b/scene/resources/color_ramp.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -88,7 +88,12 @@ public: //binary search int low = 0; int high = points.size() - 1; - int middle; + int middle = 0; + +#if DEBUG_ENABLED + if (low > high) + ERR_PRINT("low > high, this may be a bug"); +#endif while (low <= high) { middle = (low + high) / 2; diff --git a/scene/resources/concave_polygon_shape.cpp b/scene/resources/concave_polygon_shape.cpp index 47cc49c631..6ae4fde85e 100644 --- a/scene/resources/concave_polygon_shape.cpp +++ b/scene/resources/concave_polygon_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/concave_polygon_shape.h b/scene/resources/concave_polygon_shape.h index a8f9d50674..82e052fee7 100644 --- a/scene/resources/concave_polygon_shape.h +++ b/scene/resources/concave_polygon_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/concave_polygon_shape_2d.cpp b/scene/resources/concave_polygon_shape_2d.cpp index b8c931421e..7f4abf7ae0 100644 --- a/scene/resources/concave_polygon_shape_2d.cpp +++ b/scene/resources/concave_polygon_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/concave_polygon_shape_2d.h b/scene/resources/concave_polygon_shape_2d.h index d4c102e0d6..e766e88a4b 100644 --- a/scene/resources/concave_polygon_shape_2d.h +++ b/scene/resources/concave_polygon_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/convex_polygon_shape.cpp b/scene/resources/convex_polygon_shape.cpp index 10e92b43ae..bba52bd5ff 100644 --- a/scene/resources/convex_polygon_shape.cpp +++ b/scene/resources/convex_polygon_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/convex_polygon_shape.h b/scene/resources/convex_polygon_shape.h index 4340b0ef7c..e103f2d90c 100644 --- a/scene/resources/convex_polygon_shape.h +++ b/scene/resources/convex_polygon_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/convex_polygon_shape_2d.cpp b/scene/resources/convex_polygon_shape_2d.cpp index e13f7faf70..7588909d90 100644 --- a/scene/resources/convex_polygon_shape_2d.cpp +++ b/scene/resources/convex_polygon_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/convex_polygon_shape_2d.h b/scene/resources/convex_polygon_shape_2d.h index ba4a5ae8aa..3354199e05 100644 --- a/scene/resources/convex_polygon_shape_2d.h +++ b/scene/resources/convex_polygon_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp index fe0759fcba..7fbaa1f73c 100644 --- a/scene/resources/curve.cpp +++ b/scene/resources/curve.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "curve.h" + #include "core_string_names.h" template <class T> @@ -42,344 +43,6 @@ static _FORCE_INLINE_ T _bezier_interp(real_t t, T start, T control_1, T control return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3; } -#if 0 - -int Curve2D::get_point_count() const { - - return points.size(); -} -void Curve2D::add_point(const Vector2& p_pos, const Vector2& p_in, const Vector2& p_out) { - - Point n; - n.pos=p_pos; - n.in=p_in; - n.out=p_out; - points.push_back(n); - emit_signal(CoreStringNames::get_singleton()->changed); -} -void Curve2D::set_point_pos(int p_index, const Vector2& p_pos) { - - ERR_FAIL_INDEX(p_index,points.size()); - - points[p_index].pos=p_pos; - emit_signal(CoreStringNames::get_singleton()->changed); - -} -Vector2 Curve2D::get_point_pos(int p_index) const { - - ERR_FAIL_INDEX_V(p_index,points.size(),Vector2()); - return points[p_index].pos; - -} - - -void Curve2D::set_point_in(int p_index, const Vector2& p_in) { - - ERR_FAIL_INDEX(p_index,points.size()); - - points[p_index].in=p_in; - emit_signal(CoreStringNames::get_singleton()->changed); - -} -Vector2 Curve2D::get_point_in(int p_index) const { - - ERR_FAIL_INDEX_V(p_index,points.size(),Vector2()); - return points[p_index].in; - -} - -void Curve2D::set_point_out(int p_index, const Vector2& p_out) { - - ERR_FAIL_INDEX(p_index,points.size()); - - points[p_index].out=p_out; - emit_signal(CoreStringNames::get_singleton()->changed); -} - -Vector2 Curve2D::get_point_out(int p_index) const { - - ERR_FAIL_INDEX_V(p_index,points.size(),Vector2()); - return points[p_index].out; - -} - - -void Curve2D::remove_point(int p_index) { - - ERR_FAIL_INDEX(p_index,points.size()); - points.remove(p_index); - emit_signal(CoreStringNames::get_singleton()->changed); -} - -Vector2 Curve2D::interpolate(int p_index, float p_offset) const { - - int pc = points.size(); - ERR_FAIL_COND_V(pc==0,Vector2()); - - if (p_index >= pc-1) - return points[pc-1].pos; - else if (p_index<0) - return points[0].pos; - - Vector2 p0 = points[p_index].pos; - Vector2 p1 = p0+points[p_index].out; - Vector2 p3 = points[p_index+1].pos; - Vector2 p2 = p3+points[p_index+1].in; - - return _bezier_interp(p_offset,p0,p1,p2,p3); -} - -Vector2 Curve2D::interpolatef(real_t p_findex) const { - - - if (p_findex<0) - p_findex=0; - else if (p_findex>=points.size()) - p_findex=points.size(); - - return interpolate((int)p_findex,Math::fmod(p_findex,1.0)); - -} - -PoolVector<Point2> Curve2D::bake(int p_subdivs) const { - - int pc = points.size(); - - PoolVector<Point2> ret; - if (pc<2) - return ret; - - ret.resize((pc-1)*p_subdivs+1); - - PoolVector<Point2>::Write w = ret.write(); - const Point *r = points.ptr(); - - for(int i=0;i<pc;i++) { - - int ofs = pc*p_subdivs; - - int limit=(i==pc-1)?p_subdivs+1:p_subdivs; - - for(int j=0;j<limit;j++) { - - Vector2 p0 = r[i].pos; - Vector2 p1 = p0+r[i].out; - Vector2 p3 = r[i].pos; - Vector2 p2 = p3+r[i].in; - real_t t = j/(real_t)p_subdivs; - - w[ofs+j]=_bezier_interp(t,p0,p1,p2,p3); - - } - } - - w = PoolVector<Point2>::Write(); - - return ret; -} - -void Curve2D::advance(real_t p_distance,int &r_index, real_t &r_pos) const { - - int pc = points.size(); - ERR_FAIL_COND(pc<2); - if (r_index<0 || r_index>=(pc-1)) - return; - - Vector2 pos = interpolate(r_index,r_pos); - - float sign=p_distance<0 ? -1 : 1; - p_distance=Math::abs(p_distance); - - real_t base = r_index+r_pos; - real_t top = 0.1; //a tenth is in theory representative - int iterations=32; - - - - for(int i=0;i<iterations;i++) { - - - real_t o=base+top*sign; - if (sign>0 && o >=pc) { - top=pc-base; - break; - } else if (sign<0 && o <0) { - top=-base; - break; - } - - Vector2 new_d = interpolatef(o); - - if (new_d.distance_to(pos) > p_distance) - break; - top*=2.0; - } - - - real_t bottom = 0.0; - iterations=8; - real_t final_offset; - - - for(int i=0;i<iterations;i++) { - - real_t middle = (bottom+top)*0.5; - real_t o=base+middle*sign; - Vector2 new_d = interpolatef(o); - - if (new_d.distance_to(pos) > p_distance) { - bottom=middle; - } else { - top=middle; - } - final_offset=o; - } - - r_index=(int)final_offset; - r_pos=Math::fmod(final_offset,1.0); - -} - -void Curve2D::get_approx_position_from_offset(real_t p_offset,int &r_index, real_t &r_pos,int p_subdivs) const { - - ERR_FAIL_COND(points.size()<2); - - real_t accum=0; - - - - for(int i=0;i<points.size();i++) { - - Vector2 prev_p=interpolate(i,0); - - - for(int j=1;j<=p_subdivs;j++) { - - real_t frac = j/(real_t)p_subdivs; - Vector2 p = interpolate(i,frac); - real_t d = p.distance_to(prev_p); - - accum+=d; - if (accum>p_offset) { - - - r_index=j-1; - if (d>0) { - real_t mf = (p_offset-(accum-d)) / d; - r_pos=frac-(1.0-mf); - } else { - r_pos=frac; - } - - return; - } - - prev_p=p; - } - } - - r_index=points.size()-1; - r_pos=1.0; - - -} - -void Curve2D::set_points_in(const Vector2Array& p_points) { - - points.resize(p_points.size()); - for (int i=0; i<p_points.size(); i++) { - - Point p = points[i]; - p.in = p_points[i]; - points[i] = p; - }; -}; - -void Curve2D::set_points_out(const Vector2Array& p_points) { - - points.resize(p_points.size()); - for (int i=0; i<p_points.size(); i++) { - - Point p = points[i]; - p.out = p_points[i]; - points[i] = p; - }; -}; - -void Curve2D::set_points_pos(const Vector2Array& p_points) { - - points.resize(p_points.size()); - for (int i=0; i<p_points.size(); i++) { - - Point p = points[i]; - p.pos = p_points[i]; - points[i] = p; - }; -}; - -Vector2Array Curve2D::get_points_in() const { - Vector2Array ret; - ret.resize(points.size()); - for (int i=0; i<points.size(); i++) { - ret.set(i, points[i].in); - }; - return ret; -}; - -Vector2Array Curve2D::get_points_out() const { - Vector2Array ret; - ret.resize(points.size()); - for (int i=0; i<points.size(); i++) { - ret.set(i, points[i].out); - }; - return ret; -}; - -Vector2Array Curve2D::get_points_pos() const { - Vector2Array ret; - ret.resize(points.size()); - for (int i=0; i<points.size(); i++) { - ret.set(i, points[i].pos); - }; - return ret; -}; - - -void Curve2D::_bind_methods() { - - ClassDB::bind_method(D_METHOD("get_point_count"),&Curve2D::get_point_count); - ClassDB::bind_method(D_METHOD("add_point","pos","in","out"),&Curve2D::add_point,DEFVAL(Vector2()),DEFVAL(Vector2())); - ClassDB::bind_method(D_METHOD("set_point_pos","idx","pos"),&Curve2D::set_point_pos); - ClassDB::bind_method(D_METHOD("get_point_pos","idx"),&Curve2D::get_point_pos); - ClassDB::bind_method(D_METHOD("set_point_in","idx","pos"),&Curve2D::set_point_in); - ClassDB::bind_method(D_METHOD("get_point_in","idx"),&Curve2D::get_point_in); - ClassDB::bind_method(D_METHOD("set_point_out","idx","pos"),&Curve2D::set_point_out); - ClassDB::bind_method(D_METHOD("get_point_out","idx"),&Curve2D::get_point_out); - ClassDB::bind_method(D_METHOD("remove_point","idx"),&Curve2D::remove_point); - ClassDB::bind_method(D_METHOD("interpolate","idx","t"),&Curve2D::interpolate); - ClassDB::bind_method(D_METHOD("bake","subdivs"),&Curve2D::bake,DEFVAL(10)); - - - ClassDB::bind_method(D_METHOD("set_points_in"),&Curve2D::set_points_in); - ClassDB::bind_method(D_METHOD("set_points_out"),&Curve2D::set_points_out); - ClassDB::bind_method(D_METHOD("set_points_pos"),&Curve2D::set_points_pos); - - ClassDB::bind_method(D_METHOD("get_points_in"),&Curve2D::get_points_in); - ClassDB::bind_method(D_METHOD("get_points_out"),&Curve2D::get_points_out); - ClassDB::bind_method(D_METHOD("get_points_pos"),&Curve2D::get_points_pos); - - ADD_PROPERTY( PropertyInfo( Variant::VECTOR2_ARRAY, "points_in"), "set_points_in","get_points_in"); - ADD_PROPERTY( PropertyInfo( Variant::VECTOR2_ARRAY, "points_out"), "set_points_out","get_points_out"); - ADD_PROPERTY( PropertyInfo( Variant::VECTOR2_ARRAY, "points_pos"), "set_points_pos","get_points_pos"); -} - - -Curve2D::Curve2D() -{ -} - -#endif - const char *Curve::SIGNAL_RANGE_CHANGED = "range_changed"; Curve::Curve() { diff --git a/scene/resources/curve.h b/scene/resources/curve.h index e302f1e0af..3071aee5de 100644 --- a/scene/resources/curve.h +++ b/scene/resources/curve.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -31,56 +31,6 @@ #define CURVE_H #include "resource.h" -#if 0 -class Curve2D : public Resource { - - GDCLASS(Curve2D,Resource); - - struct Point { - - Vector2 in; - Vector2 out; - Vector2 pos; - }; - - - Vector<Point> points; - -protected: - - static void _bind_methods(); - - void set_points_in(const Vector2Array& p_points_in); - void set_points_out(const Vector2Array& p_points_out); - void set_points_pos(const Vector2Array& p_points_pos); - - Vector2Array get_points_in() const; - Vector2Array get_points_out() const; - Vector2Array get_points_pos() const; - -public: - - - int get_point_count() const; - void add_point(const Vector2& p_pos, const Vector2& p_in=Vector2(), const Vector2& p_out=Vector2()); - void set_point_pos(int p_index, const Vector2& p_pos); - Vector2 get_point_pos(int p_index) const; - void set_point_in(int p_index, const Vector2& p_in); - Vector2 get_point_in(int p_index) const; - void set_point_out(int p_index, const Vector2& p_out); - Vector2 get_point_out(int p_index) const; - void remove_point(int p_index); - - Vector2 interpolate(int p_index, float p_offset) const; - Vector2 interpolatef(real_t p_findex) const; - PoolVector<Point2> bake(int p_subdivs=10) const; - void advance(real_t p_distance,int &r_index, real_t &r_pos) const; - void get_approx_position_from_offset(real_t p_offset,int &r_index, real_t &r_pos,int p_subdivs=16) const; - - Curve2D(); -}; - -#endif // y(x) curve class Curve : public Resource { diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index 03288e45bf..fdea5960e5 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -408,6 +408,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const // Label + theme->set_stylebox("normal", "Label", memnew(StyleBoxEmpty)); theme->set_font("font", "Label", default_font); theme->set_color("font_color", "Label", Color(1, 1, 1)); @@ -525,7 +526,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("slider", "VSlider", make_stylebox(vslider_bg_png, 4, 4, 4, 4)); theme->set_stylebox("grabber_highlight", "VSlider", make_stylebox(vslider_grabber_hl_png, 6, 6, 6, 6)); theme->set_stylebox("grabber_disabled", "VSlider", make_stylebox(vslider_grabber_disabled_png, 6, 6, 6, 6)); - theme->set_stylebox("focus", "HSlider", focus); + theme->set_stylebox("focus", "VSlider", focus); theme->set_icon("grabber", "VSlider", make_icon(vslider_grabber_png)); theme->set_icon("grabber_highlight", "VSlider", make_icon(vslider_grabber_hl_png)); @@ -793,6 +794,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const // RichTextLabel theme->set_stylebox("focus", "RichTextLabel", focus); + theme->set_stylebox("normal", "RichTextLabel", make_stylebox(tree_bg_png, 3, 3, 3, 3)); theme->set_font("normal_font", "RichTextLabel", default_font); theme->set_font("bold_font", "RichTextLabel", default_font); diff --git a/scene/resources/default_theme/default_theme.h b/scene/resources/default_theme/default_theme.h index 6fd57b6f22..f2a4b2616d 100644 --- a/scene/resources/default_theme/default_theme.h +++ b/scene/resources/default_theme/default_theme.h @@ -1,9 +1,9 @@ /*************************************************************************/ -/* default_theme.cpp */ +/* default_theme.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index 57b860583e..82739b58a0 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index b8ff2845e7..52c3f30590 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/dynamic_font_stb.cpp b/scene/resources/dynamic_font_stb.cpp index fa8cf4723b..91263fb125 100644 --- a/scene/resources/dynamic_font_stb.cpp +++ b/scene/resources/dynamic_font_stb.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/dynamic_font_stb.h b/scene/resources/dynamic_font_stb.h index a2c081a925..24d764e716 100644 --- a/scene/resources/dynamic_font_stb.h +++ b/scene/resources/dynamic_font_stb.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp index 60a700aad8..da3bc6a95b 100644 --- a/scene/resources/environment.cpp +++ b/scene/resources/environment.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -269,13 +269,13 @@ Ref<Texture> Environment::get_adjustment_color_correction() const { void Environment::_validate_property(PropertyInfo &property) const { if (property.name == "background_sky" || property.name == "background_sky_scale" || property.name == "ambient_light/sky_contribution") { - if (bg_mode != BG_SKY) { + if (bg_mode != BG_SKY && bg_mode != BG_COLOR_SKY) { property.usage = PROPERTY_USAGE_NOEDITOR; } } if (property.name == "background_color") { - if (bg_mode != BG_COLOR) { + if (bg_mode != BG_COLOR && bg_mode != BG_COLOR_SKY) { property.usage = PROPERTY_USAGE_NOEDITOR; } } @@ -839,7 +839,7 @@ void Environment::_bind_methods() { ClassDB::bind_method(D_METHOD("get_ambient_light_sky_contribution"), &Environment::get_ambient_light_sky_contribution); ADD_GROUP("Background", "background_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "background_mode", PROPERTY_HINT_ENUM, "Clear Color,Custom Color,Sky,Canvas,Keep"), "set_background", "get_background"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "background_mode", PROPERTY_HINT_ENUM, "Clear Color,Custom Color,Sky,Color+Sky,Canvas,Keep"), "set_background", "get_background"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "background_sky", PROPERTY_HINT_RESOURCE_TYPE, "Sky"), "set_sky", "get_sky"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "background_sky_scale", PROPERTY_HINT_RANGE, "0,32,0.01"), "set_sky_scale", "get_sky_scale"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "background_color"), "set_bg_color", "get_bg_color"); @@ -994,10 +994,10 @@ void Environment::_bind_methods() { ADD_GROUP("SSAO", "ssao_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssao_enabled"), "set_ssao_enabled", "is_ssao_enabled"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius", PROPERTY_HINT_RANGE, "0.1,16,0.1"), "set_ssao_radius", "get_ssao_radius"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity", PROPERTY_HINT_RANGE, "0.0,9,0.1"), "set_ssao_intensity", "get_ssao_intensity"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius2", PROPERTY_HINT_RANGE, "0.0,16,0.1"), "set_ssao_radius2", "get_ssao_radius2"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity2", PROPERTY_HINT_RANGE, "0.0,9,0.1"), "set_ssao_intensity2", "get_ssao_intensity2"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius", PROPERTY_HINT_RANGE, "0.1,128,0.1"), "set_ssao_radius", "get_ssao_radius"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity", PROPERTY_HINT_RANGE, "0.0,128,0.1"), "set_ssao_intensity", "get_ssao_intensity"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_radius2", PROPERTY_HINT_RANGE, "0.0,128,0.1"), "set_ssao_radius2", "get_ssao_radius2"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_intensity2", PROPERTY_HINT_RANGE, "0.0,128,0.1"), "set_ssao_intensity2", "get_ssao_intensity2"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_bias", PROPERTY_HINT_RANGE, "0.001,8,0.001"), "set_ssao_bias", "get_ssao_bias"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "ssao_light_affect", PROPERTY_HINT_RANGE, "0.00,1,0.01"), "set_ssao_direct_light_affect", "get_ssao_direct_light_affect"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "ssao_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_ssao_color", "get_ssao_color"); @@ -1118,6 +1118,7 @@ void Environment::_bind_methods() { BIND_ENUM_CONSTANT(BG_CLEAR_COLOR); BIND_ENUM_CONSTANT(BG_COLOR); BIND_ENUM_CONSTANT(BG_SKY); + BIND_ENUM_CONSTANT(BG_COLOR_SKY); BIND_ENUM_CONSTANT(BG_CANVAS); BIND_ENUM_CONSTANT(BG_MAX); diff --git a/scene/resources/environment.h b/scene/resources/environment.h index 3a6906aa27..9046ec1e49 100644 --- a/scene/resources/environment.h +++ b/scene/resources/environment.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -45,6 +45,7 @@ public: BG_CLEAR_COLOR, BG_COLOR, BG_SKY, + BG_COLOR_SKY, BG_CANVAS, BG_KEEP, BG_MAX diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index 035e514eac..ea75748b3d 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -40,7 +40,7 @@ void Font::draw_halign(RID p_canvas_item, const Point2 &p_pos, HAlign p_align, f return; } - float ofs; + float ofs = 0.f; switch (p_align) { case HALIGN_LEFT: { ofs = 0; @@ -51,6 +51,9 @@ void Font::draw_halign(RID p_canvas_item, const Point2 &p_pos, HAlign p_align, f case HALIGN_RIGHT: { ofs = p_width - length; } break; + default: { + ERR_PRINT("Unknown halignment type"); + } break; } draw(p_canvas_item, p_pos + Point2(ofs, 0), p_text, p_modulate, p_width); } diff --git a/scene/resources/font.h b/scene/resources/font.h index a04ffbdd4b..3bb7aeac85 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/gibberish_stream.cpp b/scene/resources/gibberish_stream.cpp deleted file mode 100644 index e2994f1419..0000000000 --- a/scene/resources/gibberish_stream.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/*************************************************************************/ -/* gibberish_stream.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#include "gibberish_stream.h" -#include "servers/audio_server.h" - -//TODO: This class needs to be adapted to the new AudioStream API, -// or dropped if nobody cares about fixing it :) (GH-3307) - -#if 0 - -int AudioStreamGibberish::get_channel_count() const { - - return 1; -} - - -static float _get_vol_at_pos(int p_pos, int p_len, int p_x_fade) { - - if (p_pos < p_x_fade) - return float(p_pos)/p_x_fade; - else if (p_pos>(p_len-p_x_fade)) - return float(p_len-p_pos)/p_x_fade; - else - return 1.0; - -} - int AudioStreamGibberish::randomize() { - - if (rand_idx==_rand_pool.size()) { - - for(int i=0;i<_rand_pool.size();i++) { - - SWAP(_rand_pool[i],_rand_pool[Math::rand()%_rand_pool.size()]); - } - rand_idx=0; - } - - return _rand_pool[rand_idx++]; -} - -bool AudioStreamGibberish::mix(int32_t *p_buffer, int p_frames) { - - if (!active) - return false; - - zeromem(p_buffer,p_frames*sizeof(int32_t)); - - if (!paused && active_voices==0) { - - active_voices=1; - playback[0].idx=randomize(); - playback[0].fp_pos=0; - playback[0].scale=Math::random(1,1+pitch_random_scale); - } - - for(int i=0;i<active_voices;i++) { - - RID s = _samples[playback[i].idx]->get_rid(); - - uint64_t fp_pos=playback[i].fp_pos; - const void *data = AudioServer::get_singleton()->sample_get_data_ptr(s); - bool is16 = AudioServer::get_singleton()->sample_get_format(s)==AudioServer::SAMPLE_FORMAT_PCM16; - int skip = AudioServer::get_singleton()->sample_is_stereo(s) ? 1: 0; - uint64_t max = AudioServer::get_singleton()->sample_get_length(s) * uint64_t(FP_LEN); - int mrate = AudioServer::get_singleton()->sample_get_mix_rate(s) * pitch_scale * playback[i].scale; - uint64_t increment = uint64_t(mrate) * uint64_t(FP_LEN) / get_mix_rate(); - - - float vol_begin = _get_vol_at_pos(fp_pos>>FP_BITS,max>>FP_BITS,xfade_time*mrate); - float vol_end = _get_vol_at_pos((fp_pos+p_frames*increment)>>FP_BITS,max>>FP_BITS,xfade_time*mrate); - - int32_t vol = CLAMP(int32_t(vol_begin * 65535),0,65535); - int32_t vol_to = CLAMP(int32_t(vol_end * 65535),0,65535); - int32_t vol_inc = (vol_to-vol)/p_frames; - - bool done=false; - - if (is16) { - - const int16_t *smp = (int16_t*)data; - for(int i=0;i<p_frames;i++) { - - if (fp_pos >= max) { - done=true; - break; - } - - int idx = (fp_pos>>FP_BITS)<<skip; - p_buffer[i]+=int32_t(smp[idx])*vol; - vol+=vol_inc; - - fp_pos+=increment; - } - } else { - - const int8_t *smp = (int8_t*)data; - for(int i=0;i<p_frames;i++) { - - if (fp_pos >= max) { - done=true; - break; - } - - int idx = (fp_pos>>FP_BITS)<<skip; - p_buffer[i]+=(int32_t(smp[idx])<<8)*vol; - vol+=vol_inc; - fp_pos+=increment; - } - - } - - playback[i].fp_pos=fp_pos; - if (!paused && active_voices==1 && (vol_end < vol_begin || done)) { - //xfade to something else i gues - active_voices=2; - playback[1].idx=randomize(); - playback[1].fp_pos=0; - playback[1].scale=Math::random(1,1+pitch_random_scale); - } - - if (done) { - - if (i==0 && active_voices==2) { - playback[0]=playback[1]; - i--; - } - active_voices--; - - } - } - - return true; -} - - -void AudioStreamGibberish::play() { - if (active) - stop(); - - - if (!phonemes.is_valid()) - return; - - - List<StringName> slist; - phonemes->get_sample_list(&slist); - if (slist.size()==0) - return; - - _samples.resize(slist.size()); - _rand_pool.resize(slist.size()); - - int i=0; - for(List<StringName>::Element *E=slist.front();E;E=E->next()) { - - _rand_pool[i]=i; - _samples[i++]=phonemes->get_sample(E->get()); - } - - rand_idx=0; - active_voices=0; - active=true; -} - -void AudioStreamGibberish::stop(){ - - active=false; - - -} - -bool AudioStreamGibberish::is_playing() const { - - return active; -} - - -void AudioStreamGibberish::set_paused(bool p_paused){ - - paused=p_paused; -} - -bool AudioStreamGibberish::is_paused(bool p_paused) const{ - - return paused; -} - -void AudioStreamGibberish::set_loop(bool p_enable){ - - -} - -bool AudioStreamGibberish::has_loop() const{ - - return false; -} - - -float AudioStreamGibberish::get_length() const{ - - return 0; -} - - -String AudioStreamGibberish::get_stream_name() const{ - - return "Gibberish"; -} - - -int AudioStreamGibberish::get_loop_count() const{ - - return 0; -} - - -float AudioStreamGibberish::get_pos() const{ - - return 0; -} - -void AudioStreamGibberish::seek_pos(float p_time){ - - -} - - -AudioStream::UpdateMode AudioStreamGibberish::get_update_mode() const{ - - return AudioStream::UPDATE_NONE; -} - -void AudioStreamGibberish::update(){ - - -} - - -void AudioStreamGibberish::set_phonemes(const Ref<SampleLibrary>& p_phonemes) { - - phonemes=p_phonemes; - -} - -Ref<SampleLibrary> AudioStreamGibberish::get_phonemes() const { - - return phonemes; -} - -void AudioStreamGibberish::set_xfade_time(float p_xfade) { - - xfade_time=p_xfade; -} - -float AudioStreamGibberish::get_xfade_time() const { - - return xfade_time; -} - -void AudioStreamGibberish::set_pitch_scale(float p_scale) { - - pitch_scale=p_scale; -} - -float AudioStreamGibberish::get_pitch_scale() const { - - return pitch_scale; -} - -void AudioStreamGibberish::set_pitch_random_scale(float p_random_scale) { - - pitch_random_scale=p_random_scale; -} - -float AudioStreamGibberish::get_pitch_random_scale() const { - - return pitch_random_scale; -} - -void AudioStreamGibberish::_bind_methods() { - - ClassDB::bind_method(D_METHOD("set_phonemes","phonemes"),&AudioStreamGibberish::set_phonemes); - ClassDB::bind_method(D_METHOD("get_phonemes"),&AudioStreamGibberish::get_phonemes); - - ClassDB::bind_method(D_METHOD("set_pitch_scale","pitch_scale"),&AudioStreamGibberish::set_pitch_scale); - ClassDB::bind_method(D_METHOD("get_pitch_scale"),&AudioStreamGibberish::get_pitch_scale); - - ClassDB::bind_method(D_METHOD("set_pitch_random_scale","pitch_random_scale"),&AudioStreamGibberish::set_pitch_random_scale); - ClassDB::bind_method(D_METHOD("get_pitch_random_scale"),&AudioStreamGibberish::get_pitch_random_scale); - - ClassDB::bind_method(D_METHOD("set_xfade_time","sec"),&AudioStreamGibberish::set_xfade_time); - ClassDB::bind_method(D_METHOD("get_xfade_time"),&AudioStreamGibberish::get_xfade_time); - - ADD_PROPERTY( PropertyInfo(Variant::OBJECT,"phonemes",PROPERTY_HINT_RESOURCE_TYPE,"SampleLibrary"),"set_phonemes","get_phonemes"); - ADD_PROPERTY( PropertyInfo(Variant::REAL,"pitch_scale",PROPERTY_HINT_RANGE,"0.01,64,0.01"),"set_pitch_scale","get_pitch_scale"); - ADD_PROPERTY( PropertyInfo(Variant::REAL,"pitch_random_scale",PROPERTY_HINT_RANGE,"0,64,0.01"),"set_pitch_random_scale","get_pitch_random_scale"); - ADD_PROPERTY( PropertyInfo(Variant::REAL,"xfade_sec",PROPERTY_HINT_RANGE,"0.001,0.5,0.001"),"set_xfade_time","get_xfade_time"); - -} - -AudioStreamGibberish::AudioStreamGibberish() { - - xfade_time=0.1; - pitch_scale=1; - pitch_random_scale=0; - active=false; - paused=false; - active_voices=0; -} -#endif diff --git a/scene/resources/gibberish_stream.h b/scene/resources/gibberish_stream.h deleted file mode 100644 index ebe61382eb..0000000000 --- a/scene/resources/gibberish_stream.h +++ /dev/null @@ -1,118 +0,0 @@ -/*************************************************************************/ -/* gibberish_stream.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* http://www.godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ -#ifndef GIBBERISH_STREAM_H -#define GIBBERISH_STREAM_H - -//TODO: This class needs to be adapted to the new AudioStream API, -// or dropped if nobody cares about fixing it :) (GH-3307) - -#if 0 -#include "scene/resources/audio_stream.h" -#include "scene/resources/sample_library.h" -class AudioStreamGibberish : public AudioStream { - - GDCLASS( AudioStreamGibberish, AudioStream ); - - enum { - - FP_BITS = 12, - FP_LEN = (1<<12), - }; - bool active; - bool paused; - - float xfade_time; - float pitch_scale; - float pitch_random_scale; - Vector<Ref<Sample> > _samples; - Vector<int> _rand_pool; - int rand_idx; - _FORCE_INLINE_ int randomize(); - - struct Playback { - - int idx; - uint64_t fp_pos; - float scale; - }; - - Playback playback[2]; - int active_voices; - - Ref<SampleLibrary> phonemes; -protected: - - virtual int get_channel_count() const; - virtual bool mix(int32_t *p_buffer, int p_frames); - - static void _bind_methods(); - -public: - - void set_phonemes(const Ref<SampleLibrary>& p_phonemes); - Ref<SampleLibrary> get_phonemes() const; - - virtual void play(); - virtual void stop(); - virtual bool is_playing() const; - - virtual void set_paused(bool p_paused); - virtual bool is_paused(bool p_paused) const; - - virtual void set_loop(bool p_enable); - virtual bool has_loop() const; - - virtual float get_length() const; - - virtual String get_stream_name() const; - - virtual int get_loop_count() const; - - virtual float get_pos() const; - virtual void seek_pos(float p_time); - - virtual UpdateMode get_update_mode() const; - virtual void update(); - - void set_xfade_time(float p_xfade); - float get_xfade_time() const; - - void set_pitch_scale(float p_scale); - float get_pitch_scale() const; - - void set_pitch_random_scale(float p_random_scale); - float get_pitch_random_scale() const; - - AudioStreamGibberish(); -}; - -#endif - -#endif // GIBBERISH_STREAM_H diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 555c94a512..abe9a00c3f 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "material.h" + #include "scene/scene_string_names.h" void Material::set_next_pass(const Ref<Material> &p_pass) { @@ -47,22 +48,49 @@ Ref<Material> Material::get_next_pass() const { return next_pass; } +void Material::set_render_priority(int p_priority) { + + ERR_FAIL_COND(p_priority < RENDER_PRIORITY_MIN); + ERR_FAIL_COND(p_priority > RENDER_PRIORITY_MAX); + render_priority = p_priority; + VS::get_singleton()->material_set_render_priority(material, p_priority); +} + +int Material::get_render_priority() const { + + return render_priority; +} + RID Material::get_rid() const { return material; } +void Material::_validate_property(PropertyInfo &property) const { + + if (!_can_do_next_pass() && property.name == "next_pass") { + property.usage = 0; + } +} void Material::_bind_methods() { ClassDB::bind_method(D_METHOD("set_next_pass", "next_pass"), &Material::set_next_pass); ClassDB::bind_method(D_METHOD("get_next_pass"), &Material::get_next_pass); + ClassDB::bind_method(D_METHOD("set_render_priority", "priority"), &Material::set_render_priority); + ClassDB::bind_method(D_METHOD("get_render_priority"), &Material::get_render_priority); + + ADD_PROPERTY(PropertyInfo(Variant::INT, "render_priority", PROPERTY_HINT_RANGE, itos(RENDER_PRIORITY_MIN) + "," + itos(RENDER_PRIORITY_MAX) + ",1"), "set_render_priority", "get_render_priority"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "next_pass", PROPERTY_HINT_RESOURCE_TYPE, "Material"), "set_next_pass", "get_next_pass"); + + BIND_CONSTANT(RENDER_PRIORITY_MAX); + BIND_CONSTANT(RENDER_PRIORITY_MIN); } Material::Material() { material = VisualServer::get_singleton()->material_create(); + render_priority = 0; } Material::~Material() { @@ -182,6 +210,11 @@ void ShaderMaterial::get_argument_options(const StringName &p_function, int p_id Resource::get_argument_options(p_function, p_idx, r_options); } +bool ShaderMaterial::_can_do_next_pass() const { + + return shader.is_valid() && shader->get_mode() == Shader::MODE_SPATIAL; +} + ShaderMaterial::ShaderMaterial() { } @@ -217,6 +250,7 @@ void SpatialMaterial::init_shaders() { shader_names->anisotropy = "anisotropy_ratio"; shader_names->depth_scale = "depth_scale"; shader_names->subsurface_scattering_strength = "subsurface_scattering_strength"; + shader_names->transmission = "transmission"; shader_names->refraction = "refraction"; shader_names->point_size = "point_size"; shader_names->uv1_scale = "uv1_scale"; @@ -226,8 +260,8 @@ void SpatialMaterial::init_shaders() { shader_names->uv1_blend_sharpness = "uv1_blend_sharpness"; shader_names->uv2_blend_sharpness = "uv2_blend_sharpness"; - shader_names->particle_h_frames = "particle_h_frames"; - shader_names->particle_v_frames = "particle_v_frames"; + shader_names->particles_anim_h_frames = "particles_anim_h_frames"; + shader_names->particles_anim_v_frames = "particles_anim_v_frames"; shader_names->particles_anim_loop = "particles_anim_loop"; shader_names->depth_min_layers = "depth_min_layers"; shader_names->depth_max_layers = "depth_max_layers"; @@ -254,6 +288,7 @@ void SpatialMaterial::init_shaders() { shader_names->texture_names[TEXTURE_AMBIENT_OCCLUSION] = "texture_ambient_occlusion"; shader_names->texture_names[TEXTURE_DEPTH] = "texture_depth"; shader_names->texture_names[TEXTURE_SUBSURFACE_SCATTERING] = "texture_subsurface_scattering"; + shader_names->texture_names[TEXTURE_TRANSMISSION] = "texture_transmission"; shader_names->texture_names[TEXTURE_REFRACTION] = "texture_refraction"; shader_names->texture_names[TEXTURE_DETAIL_MASK] = "texture_detail_mask"; shader_names->texture_names[TEXTURE_DETAIL_ALBEDO] = "texture_detail_albedo"; @@ -330,7 +365,7 @@ void SpatialMaterial::_update_shader() { } switch (diffuse_mode) { case DIFFUSE_LAMBERT: code += ",diffuse_lambert"; break; - case DIFFUSE_HALF_LAMBERT: code += ",diffuse_half_lambert"; break; + case DIFFUSE_LAMBERT_WRAP: code += ",diffuse_lambert_wrap"; break; case DIFFUSE_OREN_NAYAR: code += ",diffuse_oren_nayar"; break; case DIFFUSE_BURLEY: code += ",diffuse_burley"; break; case DIFFUSE_TOON: code += ",diffuse_toon"; break; @@ -346,14 +381,14 @@ void SpatialMaterial::_update_shader() { if (flags[FLAG_UNSHADED]) { code += ",unshaded"; } - if (flags[FLAG_ONTOP]) { - code += ",ontop"; + if (flags[FLAG_DISABLE_DEPTH_TEST]) { + code += ",depth_test_disable"; } if (flags[FLAG_USE_VERTEX_LIGHTING]) { code += ",vertex_lighting"; } - if (flags[FLAG_UV1_USE_TRIPLANAR] || flags[FLAG_UV2_USE_TRIPLANAR]) { + if (flags[FLAG_TRIPLANAR_USE_WORLD] && (flags[FLAG_UV1_USE_TRIPLANAR] || flags[FLAG_UV2_USE_TRIPLANAR])) { code += ",world_vertex_coords"; } code += ";\n"; @@ -429,6 +464,12 @@ void SpatialMaterial::_update_shader() { code += "uniform sampler2D texture_subsurface_scattering : hint_white;\n"; } + if (features[FEATURE_TRANSMISSION]) { + + code += "uniform vec4 transmission : hint_color;\n"; + code += "uniform sampler2D texture_transmission : hint_black;\n"; + } + if (features[FEATURE_DEPTH_MAPPING]) { code += "uniform sampler2D texture_depth : hint_black;\n"; code += "uniform float depth_scale;\n"; @@ -436,10 +477,10 @@ void SpatialMaterial::_update_shader() { code += "uniform int depth_max_layers;\n"; } if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "varying vec3 uv1_world_pos;\n"; + code += "varying vec3 uv1_triplanar_pos;\n"; } if (flags[FLAG_UV2_USE_TRIPLANAR]) { - code += "varying vec3 uv2_world_pos;\n"; + code += "varying vec3 uv2_triplanar_pos;\n"; } if (flags[FLAG_UV1_USE_TRIPLANAR]) { code += "uniform float uv1_blend_sharpness;\n"; @@ -502,8 +543,8 @@ void SpatialMaterial::_update_shader() { code += "\tint particle_total_frames = particles_anim_h_frames * particles_anim_v_frames;\n"; code += "\tint particle_frame = int(INSTANCE_CUSTOM.y * float(particle_total_frames));\n"; code += "\tif (particles_anim_loop) particle_frame=clamp(particle_frame,0,particle_total_frames-1); else particle_frame=abs(particle_frame)%particle_total_frames;\n"; - //code += "\tUV /= vec2(float(particles_anim_h_frames),float(particles_anim_v_frames));\n"; - //code += "\tUV+= UV * vec2(float(particle_frame % particles_anim_h_frames),float(particle_frame / particles_anim_v_frames));\n"; + code += "\tUV /= vec2(float(particles_anim_h_frames),float(particles_anim_v_frames));\n"; + code += "\tUV += vec2(float(particle_frame % particles_anim_h_frames) / float(particles_anim_h_frames),float(particle_frame / particles_anim_h_frames) / float(particles_anim_v_frames));\n"; //handle rotation // code += "\tmat4 rotation = mat4(" } break; @@ -529,7 +570,7 @@ void SpatialMaterial::_update_shader() { } if (detail_uv == DETAIL_UV_2 && !flags[FLAG_UV2_USE_TRIPLANAR]) { - code += "\tUV2=UV2*uv2_scale+uv2_offset;\n"; + code += "\tUV2=UV2*uv2_scale.xy+uv2_offset.xy;\n"; } if (flags[FLAG_UV1_USE_TRIPLANAR] || flags[FLAG_UV2_USE_TRIPLANAR]) { //generate tangent and binormal in world space @@ -548,16 +589,16 @@ void SpatialMaterial::_update_shader() { code += "\tuv1_power_normal=pow(abs(NORMAL),vec3(uv1_blend_sharpness));\n"; code += "\tuv1_power_normal/=dot(uv1_power_normal,vec3(1.0));\n"; - code += "\tuv1_world_pos = VERTEX * uv1_scale + uv1_offset;\n"; - code += "\tuv1_world_pos *= vec3(1.0,-1.0, 1.0);\n"; + code += "\tuv1_triplanar_pos = VERTEX * uv1_scale + uv1_offset;\n"; + code += "\tuv1_triplanar_pos *= vec3(1.0,-1.0, 1.0);\n"; } if (flags[FLAG_UV2_USE_TRIPLANAR]) { code += "\tuv2_power_normal=pow(abs(NORMAL), vec3(uv2_blend_sharpness));\n"; code += "\tuv2_power_normal/=dot(uv2_power_normal,vec3(1.0));\n"; - code += "\tuv2_world_pos = VERTEX * uv2_scale + uv2_offset;\n"; - code += "\tuv2_world_pos *= vec3(1.0,-1.0, 1.0);\n"; + code += "\tuv2_triplanar_pos = VERTEX * uv2_scale + uv2_offset;\n"; + code += "\tuv2_triplanar_pos *= vec3(1.0,-1.0, 1.0);\n"; } if (grow_enabled) { @@ -567,11 +608,11 @@ void SpatialMaterial::_update_shader() { code += "}\n"; code += "\n\n"; if (flags[FLAG_UV1_USE_TRIPLANAR] || flags[FLAG_UV2_USE_TRIPLANAR]) { - code += "vec4 triplanar_texture(sampler2D p_sampler,vec3 p_weights,vec3 p_world_pos) {\n"; + code += "vec4 triplanar_texture(sampler2D p_sampler,vec3 p_weights,vec3 p_triplanar_pos) {\n"; code += "\tvec4 samp=vec4(0.0);\n"; - code += "\tsamp+= texture(p_sampler,p_world_pos.xy) * p_weights.z;\n"; - code += "\tsamp+= texture(p_sampler,p_world_pos.xz) * p_weights.y;\n"; - code += "\tsamp+= texture(p_sampler,p_world_pos.zy * vec2(-1.0,1.0)) * p_weights.x;\n"; + code += "\tsamp+= texture(p_sampler,p_triplanar_pos.xy) * p_weights.z;\n"; + code += "\tsamp+= texture(p_sampler,p_triplanar_pos.xz) * p_weights.y;\n"; + code += "\tsamp+= texture(p_sampler,p_triplanar_pos.zy * vec2(-1.0,1.0)) * p_weights.x;\n"; code += "\treturn samp;\n"; code += "}\n"; } @@ -627,7 +668,7 @@ void SpatialMaterial::_update_shader() { code += "\tvec4 albedo_tex = texture(texture_albedo,POINT_COORD);\n"; } else { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tvec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_world_pos);\n"; + code += "\tvec4 albedo_tex = triplanar_texture(texture_albedo,uv1_power_normal,uv1_triplanar_pos);\n"; } else { code += "\tvec4 albedo_tex = texture(texture_albedo,base_uv);\n"; } @@ -639,13 +680,13 @@ void SpatialMaterial::_update_shader() { code += "\tALBEDO = albedo.rgb * albedo_tex.rgb;\n"; if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tfloat metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_world_pos),metallic_texture_channel);\n"; + code += "\tfloat metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel);\n"; } else { code += "\tfloat metallic_tex = dot(texture(texture_metallic,base_uv),metallic_texture_channel);\n"; } code += "\tMETALLIC = metallic_tex * metallic;\n"; if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tfloat roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_world_pos),roughness_texture_channel);\n"; + code += "\tfloat roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel);\n"; } else { code += "\tfloat roughness_tex = dot(texture(texture_roughness,base_uv),roughness_texture_channel);\n"; } @@ -654,7 +695,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_NORMAL_MAPPING]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tNORMALMAP = triplanar_texture(texture_normal,uv1_power_normal,uv1_world_pos).rgb;\n"; + code += "\tNORMALMAP = triplanar_texture(texture_normal,uv1_power_normal,uv1_triplanar_pos).rgb;\n"; } else { code += "\tNORMALMAP = texture(texture_normal,base_uv).rgb;\n"; } @@ -663,7 +704,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_EMISSION]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tvec3 emission_tex = triplanar_texture(texture_emission,uv1_power_normal,uv1_world_pos).rgb;\n"; + code += "\tvec3 emission_tex = triplanar_texture(texture_emission,uv1_power_normal,uv1_triplanar_pos).rgb;\n"; } else { code += "\tvec3 emission_tex = texture(texture_emission,base_uv).rgb;\n"; } @@ -690,7 +731,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_RIM]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tvec2 rim_tex = triplanar_texture(texture_rim,uv1_power_normal,uv1_world_pos).xy;\n"; + code += "\tvec2 rim_tex = triplanar_texture(texture_rim,uv1_power_normal,uv1_triplanar_pos).xy;\n"; } else { code += "\tvec2 rim_tex = texture(texture_rim,base_uv).xy;\n"; } @@ -700,7 +741,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_CLEARCOAT]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tvec2 clearcoat_tex = triplanar_texture(texture_clearcoat,uv1_power_normal,uv1_world_pos).xy;\n"; + code += "\tvec2 clearcoat_tex = triplanar_texture(texture_clearcoat,uv1_power_normal,uv1_triplanar_pos).xy;\n"; } else { code += "\tvec2 clearcoat_tex = texture(texture_clearcoat,base_uv).xy;\n"; } @@ -710,7 +751,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_ANISOTROPY]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tvec3 anisotropy_tex = triplanar_texture(texture_flowmap,uv1_power_normal,uv1_world_pos).rga;\n"; + code += "\tvec3 anisotropy_tex = triplanar_texture(texture_flowmap,uv1_power_normal,uv1_triplanar_pos).rga;\n"; } else { code += "\tvec3 anisotropy_tex = texture(texture_flowmap,base_uv).rga;\n"; } @@ -721,13 +762,13 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_AMBIENT_OCCLUSION]) { if (flags[FLAG_AO_ON_UV2]) { if (flags[FLAG_UV2_USE_TRIPLANAR]) { - code += "\tAO = dot(triplanar_texture(texture_ambient_occlusion,uv2_power_normal,uv2_world_pos),ao_texture_channel);\n"; + code += "\tAO = dot(triplanar_texture(texture_ambient_occlusion,uv2_power_normal,uv2_triplanar_pos),ao_texture_channel);\n"; } else { code += "\tAO = dot(texture(texture_ambient_occlusion,base_uv2),ao_texture_channel);\n"; } } else { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tAO = dot(triplanar_texture(texture_ambient_occlusion,uv1_power_normal,uv1_world_pos),ao_texture_channel);\n"; + code += "\tAO = dot(triplanar_texture(texture_ambient_occlusion,uv1_power_normal,uv1_triplanar_pos),ao_texture_channel);\n"; } else { code += "\tAO = dot(texture(texture_ambient_occlusion,base_uv),ao_texture_channel);\n"; } @@ -737,21 +778,30 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_SUBSURACE_SCATTERING]) { if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tfloat sss_tex = triplanar_texture(texture_subsurface_scattering,uv1_power_normal,uv1_world_pos).r;\n"; + code += "\tfloat sss_tex = triplanar_texture(texture_subsurface_scattering,uv1_power_normal,uv1_triplanar_pos).r;\n"; } else { code += "\tfloat sss_tex = texture(texture_subsurface_scattering,base_uv).r;\n"; } code += "\tSSS_STRENGTH=subsurface_scattering_strength*sss_tex;\n"; } + if (features[FEATURE_TRANSMISSION]) { + if (flags[FLAG_UV1_USE_TRIPLANAR]) { + code += "\tvec3 transmission_tex = triplanar_texture(texture_transmission,uv1_power_normal,uv1_triplanar_pos).rgb;\n"; + } else { + code += "\tvec3 transmission_tex = texture(texture_transmission,base_uv).rgb;\n"; + } + code += "\tTRANSMISSION = (transmission.rgb+transmission_tex);\n"; + } + if (features[FEATURE_DETAIL]) { bool triplanar = (flags[FLAG_UV1_USE_TRIPLANAR] && detail_uv == DETAIL_UV_1) || (flags[FLAG_UV2_USE_TRIPLANAR] && detail_uv == DETAIL_UV_2); if (triplanar) { String tp_uv = detail_uv == DETAIL_UV_1 ? "uv1" : "uv2"; - code += "\tvec4 detail_tex = triplanar_texture(texture_detail_albedo," + tp_uv + "_power_normal," + tp_uv + "_world_pos);\n"; - code += "\tvec4 detail_norm_tex = triplanar_texture(texture_detail_normal," + tp_uv + "_power_normal," + tp_uv + "_world_pos);\n"; + code += "\tvec4 detail_tex = triplanar_texture(texture_detail_albedo," + tp_uv + "_power_normal," + tp_uv + "_triplanar_pos);\n"; + code += "\tvec4 detail_norm_tex = triplanar_texture(texture_detail_normal," + tp_uv + "_power_normal," + tp_uv + "_triplanar_pos);\n"; } else { String det_uv = detail_uv == DETAIL_UV_1 ? "base_uv" : "base_uv2"; @@ -993,6 +1043,17 @@ float SpatialMaterial::get_subsurface_scattering_strength() const { return subsurface_scattering_strength; } +void SpatialMaterial::set_transmission(const Color &p_transmission) { + + transmission = p_transmission; + VS::get_singleton()->material_set_param(_get_material(), shader_names->transmission, transmission); +} + +Color SpatialMaterial::get_transmission() const { + + return transmission; +} + void SpatialMaterial::set_refraction(float p_refraction) { refraction = p_refraction; @@ -1158,6 +1219,7 @@ void SpatialMaterial::_validate_property(PropertyInfo &property) const { _validate_feature("ao", FEATURE_AMBIENT_OCCLUSION, property); _validate_feature("depth", FEATURE_DEPTH_MAPPING, property); _validate_feature("subsurf_scatter", FEATURE_SUBSURACE_SCATTERING, property); + _validate_feature("transmission", FEATURE_TRANSMISSION, property); _validate_feature("refraction", FEATURE_REFRACTION, property); _validate_feature("detail", FEATURE_DETAIL, property); @@ -1280,7 +1342,7 @@ SpatialMaterial::BillboardMode SpatialMaterial::get_billboard_mode() const { void SpatialMaterial::set_particles_anim_h_frames(int p_frames) { particles_anim_h_frames = p_frames; - VS::get_singleton()->material_set_param(_get_material(), shader_names->particle_h_frames, p_frames); + VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_h_frames, p_frames); } int SpatialMaterial::get_particles_anim_h_frames() const { @@ -1290,7 +1352,7 @@ int SpatialMaterial::get_particles_anim_h_frames() const { void SpatialMaterial::set_particles_anim_v_frames(int p_frames) { particles_anim_v_frames = p_frames; - VS::get_singleton()->material_set_param(_get_material(), shader_names->particle_v_frames, p_frames); + VS::get_singleton()->material_set_param(_get_material(), shader_names->particles_anim_v_frames, p_frames); } int SpatialMaterial::get_particles_anim_v_frames() const { @@ -1458,6 +1520,12 @@ RID SpatialMaterial::get_material_rid_for_2d(bool p_shaded, bool p_transparent, return materials_for_2d[version]->get_rid(); } +void SpatialMaterial::set_on_top_of_alpha() { + set_feature(FEATURE_TRANSPARENT, true); + set_render_priority(RENDER_PRIORITY_MAX); + set_flag(FLAG_DISABLE_DEPTH_TEST, true); +} + void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_albedo", "albedo"), &SpatialMaterial::set_albedo); @@ -1502,6 +1570,9 @@ void SpatialMaterial::_bind_methods() { ClassDB::bind_method(D_METHOD("set_subsurface_scattering_strength", "strength"), &SpatialMaterial::set_subsurface_scattering_strength); ClassDB::bind_method(D_METHOD("get_subsurface_scattering_strength"), &SpatialMaterial::get_subsurface_scattering_strength); + ClassDB::bind_method(D_METHOD("set_transmission", "transmission"), &SpatialMaterial::set_transmission); + ClassDB::bind_method(D_METHOD("get_transmission"), &SpatialMaterial::get_transmission); + ClassDB::bind_method(D_METHOD("set_refraction", "refraction"), &SpatialMaterial::set_refraction); ClassDB::bind_method(D_METHOD("get_refraction"), &SpatialMaterial::get_refraction); @@ -1605,8 +1676,9 @@ void SpatialMaterial::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_transparent"), "set_feature", "get_feature", FEATURE_TRANSPARENT); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_unshaded"), "set_flag", "get_flag", FLAG_UNSHADED); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_vertex_lighting"), "set_flag", "get_flag", FLAG_USE_VERTEX_LIGHTING); - ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_on_top"), "set_flag", "get_flag", FLAG_ONTOP); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_no_depth_test"), "set_flag", "get_flag", FLAG_DISABLE_DEPTH_TEST); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_use_point_size"), "set_flag", "get_flag", FLAG_USE_POINT_SIZE); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_world_triplanar"), "set_flag", "get_flag", FLAG_TRIPLANAR_USE_WORLD); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flags_fixed_size"), "set_flag", "get_flag", FLAG_FIXED_SIZE); ADD_GROUP("Vertex Color", "vertex_color"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "vertex_color_use_as_albedo"), "set_flag", "get_flag", FLAG_ALBEDO_FROM_VERTEX_COLOR); @@ -1692,6 +1764,11 @@ void SpatialMaterial::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "subsurf_scatter_strength", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_subsurface_scattering_strength", "get_subsurface_scattering_strength"); ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "subsurf_scatter_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_SUBSURFACE_SCATTERING); + ADD_GROUP("Transmission", "transmission_"); + ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "transmission_enabled"), "set_feature", "get_feature", FEATURE_TRANSMISSION); + ADD_PROPERTY(PropertyInfo(Variant::COLOR, "transmission", PROPERTY_HINT_COLOR_NO_ALPHA), "set_transmission", "get_transmission"); + ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "transmission_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_TRANSMISSION); + ADD_GROUP("Refraction", "refraction_"); ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "refraction_enabled"), "set_feature", "get_feature", FEATURE_REFRACTION); ADD_PROPERTY(PropertyInfo(Variant::REAL, "refraction_scale", PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_refraction", "get_refraction"); @@ -1729,6 +1806,7 @@ void SpatialMaterial::_bind_methods() { BIND_ENUM_CONSTANT(TEXTURE_AMBIENT_OCCLUSION); BIND_ENUM_CONSTANT(TEXTURE_DEPTH); BIND_ENUM_CONSTANT(TEXTURE_SUBSURFACE_SCATTERING); + BIND_ENUM_CONSTANT(TEXTURE_TRANSMISSION); BIND_ENUM_CONSTANT(TEXTURE_REFRACTION); BIND_ENUM_CONSTANT(TEXTURE_DETAIL_MASK); BIND_ENUM_CONSTANT(TEXTURE_DETAIL_ALBEDO); @@ -1747,6 +1825,7 @@ void SpatialMaterial::_bind_methods() { BIND_ENUM_CONSTANT(FEATURE_AMBIENT_OCCLUSION); BIND_ENUM_CONSTANT(FEATURE_DEPTH_MAPPING); BIND_ENUM_CONSTANT(FEATURE_SUBSURACE_SCATTERING); + BIND_ENUM_CONSTANT(FEATURE_TRANSMISSION); BIND_ENUM_CONSTANT(FEATURE_REFRACTION); BIND_ENUM_CONSTANT(FEATURE_DETAIL); BIND_ENUM_CONSTANT(FEATURE_MAX); @@ -1767,7 +1846,7 @@ void SpatialMaterial::_bind_methods() { BIND_ENUM_CONSTANT(FLAG_UNSHADED); BIND_ENUM_CONSTANT(FLAG_USE_VERTEX_LIGHTING); - BIND_ENUM_CONSTANT(FLAG_ONTOP); + BIND_ENUM_CONSTANT(FLAG_DISABLE_DEPTH_TEST); BIND_ENUM_CONSTANT(FLAG_ALBEDO_FROM_VERTEX_COLOR); BIND_ENUM_CONSTANT(FLAG_SRGB_VERTEX_COLOR); BIND_ENUM_CONSTANT(FLAG_USE_POINT_SIZE); @@ -1776,10 +1855,11 @@ void SpatialMaterial::_bind_methods() { BIND_ENUM_CONSTANT(FLAG_UV2_USE_TRIPLANAR); BIND_ENUM_CONSTANT(FLAG_AO_ON_UV2); BIND_ENUM_CONSTANT(FLAG_USE_ALPHA_SCISSOR); + BIND_ENUM_CONSTANT(FLAG_TRIPLANAR_USE_WORLD); BIND_ENUM_CONSTANT(FLAG_MAX); BIND_ENUM_CONSTANT(DIFFUSE_LAMBERT); - BIND_ENUM_CONSTANT(DIFFUSE_HALF_LAMBERT); + BIND_ENUM_CONSTANT(DIFFUSE_LAMBERT_WRAP); BIND_ENUM_CONSTANT(DIFFUSE_OREN_NAYAR); BIND_ENUM_CONSTANT(DIFFUSE_BURLEY); BIND_ENUM_CONSTANT(DIFFUSE_TOON); @@ -1820,6 +1900,7 @@ SpatialMaterial::SpatialMaterial() set_anisotropy(0); set_depth_scale(0.05); set_subsurface_scattering_strength(0); + set_transmission(Color(0, 0, 0)); set_refraction(0.05); set_line_width(1); set_point_size(1); diff --git a/scene/resources/material.h b/scene/resources/material.h index 140b2142c9..fdb11982a8 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -48,15 +48,26 @@ class Material : public Resource { RID material; Ref<Material> next_pass; + int render_priority; protected: _FORCE_INLINE_ RID _get_material() const { return material; } static void _bind_methods(); + virtual bool _can_do_next_pass() const { return false; } + + void _validate_property(PropertyInfo &property) const; public: + enum { + RENDER_PRIORITY_MAX = VS::MATERIAL_RENDER_PRIORITY_MAX, + RENDER_PRIORITY_MIN = VS::MATERIAL_RENDER_PRIORITY_MIN, + }; void set_next_pass(const Ref<Material> &p_pass); Ref<Material> get_next_pass() const; + void set_render_priority(int p_priority); + int get_render_priority() const; + virtual RID get_rid() const; Material(); virtual ~Material(); @@ -76,6 +87,8 @@ protected: void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const; + virtual bool _can_do_next_pass() const; + public: void set_shader(const Ref<Shader> &p_shader); Ref<Shader> get_shader() const; @@ -104,6 +117,7 @@ public: TEXTURE_AMBIENT_OCCLUSION, TEXTURE_DEPTH, TEXTURE_SUBSURFACE_SCATTERING, + TEXTURE_TRANSMISSION, TEXTURE_REFRACTION, TEXTURE_DETAIL_MASK, TEXTURE_DETAIL_ALBEDO, @@ -127,6 +141,7 @@ public: FEATURE_AMBIENT_OCCLUSION, FEATURE_DEPTH_MAPPING, FEATURE_SUBSURACE_SCATTERING, + FEATURE_TRANSMISSION, FEATURE_REFRACTION, FEATURE_DETAIL, FEATURE_MAX @@ -156,13 +171,14 @@ public: enum Flags { FLAG_UNSHADED, FLAG_USE_VERTEX_LIGHTING, - FLAG_ONTOP, + FLAG_DISABLE_DEPTH_TEST, FLAG_ALBEDO_FROM_VERTEX_COLOR, FLAG_SRGB_VERTEX_COLOR, FLAG_USE_POINT_SIZE, FLAG_FIXED_SIZE, FLAG_UV1_USE_TRIPLANAR, FLAG_UV2_USE_TRIPLANAR, + FLAG_TRIPLANAR_USE_WORLD, FLAG_AO_ON_UV2, FLAG_USE_ALPHA_SCISSOR, FLAG_MAX @@ -170,7 +186,7 @@ public: enum DiffuseMode { DIFFUSE_LAMBERT, - DIFFUSE_HALF_LAMBERT, + DIFFUSE_LAMBERT_WRAP, DIFFUSE_OREN_NAYAR, DIFFUSE_BURLEY, DIFFUSE_TOON, @@ -203,12 +219,12 @@ private: union MaterialKey { struct { - uint64_t feature_mask : 11; + uint64_t feature_mask : 12; uint64_t detail_uv : 1; uint64_t blend_mode : 2; uint64_t depth_draw_mode : 2; uint64_t cull_mode : 2; - uint64_t flags : 11; + uint64_t flags : 12; uint64_t detail_blend_mode : 2; uint64_t diffuse_mode : 3; uint64_t specular_mode : 2; @@ -277,14 +293,15 @@ private: StringName anisotropy; StringName depth_scale; StringName subsurface_scattering_strength; + StringName transmission; StringName refraction; StringName point_size; StringName uv1_scale; StringName uv1_offset; StringName uv2_scale; StringName uv2_offset; - StringName particle_h_frames; - StringName particle_v_frames; + StringName particles_anim_h_frames; + StringName particles_anim_v_frames; StringName particles_anim_loop; StringName depth_min_layers; StringName depth_max_layers; @@ -328,6 +345,7 @@ private: float anisotropy; float depth_scale; float subsurface_scattering_strength; + Color transmission; float refraction; float line_width; float point_size; @@ -381,6 +399,7 @@ private: protected: static void _bind_methods(); void _validate_property(PropertyInfo &property) const; + virtual bool _can_do_next_pass() const { return true; } public: void set_albedo(const Color &p_albedo); @@ -434,6 +453,9 @@ public: void set_subsurface_scattering_strength(float p_subsurface_scattering_strength); float get_subsurface_scattering_strength() const; + void set_transmission(const Color &p_transmission); + Color get_transmission() const; + void set_refraction(float p_refraction); float get_refraction() const; @@ -511,6 +533,8 @@ public: void set_alpha_scissor_threshold(float p_treshold); float get_alpha_scissor_threshold() const; + void set_on_top_of_alpha(); + void set_metallic_texture_channel(TextureChannel p_channel); TextureChannel get_metallic_texture_channel() const; void set_roughness_texture_channel(TextureChannel p_channel); diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index ebba0ba67f..aa7827a61a 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -1035,6 +1035,7 @@ void ArrayMesh::_bind_methods() { BIND_ENUM_CONSTANT(ARRAY_BONES); BIND_ENUM_CONSTANT(ARRAY_WEIGHTS); BIND_ENUM_CONSTANT(ARRAY_INDEX); + BIND_ENUM_CONSTANT(ARRAY_MAX); BIND_ENUM_CONSTANT(ARRAY_FORMAT_VERTEX); BIND_ENUM_CONSTANT(ARRAY_FORMAT_NORMAL); diff --git a/scene/resources/mesh.h b/scene/resources/mesh.h index bccb39e8cd..53c6eb2d89 100644 --- a/scene/resources/mesh.h +++ b/scene/resources/mesh.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/mesh_data_tool.cpp b/scene/resources/mesh_data_tool.cpp index f1092a90cb..116ddc4ac6 100644 --- a/scene/resources/mesh_data_tool.cpp +++ b/scene/resources/mesh_data_tool.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/mesh_data_tool.h b/scene/resources/mesh_data_tool.h index ad771edbd1..119b49161b 100644 --- a/scene/resources/mesh_data_tool.h +++ b/scene/resources/mesh_data_tool.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/mesh_library.cpp b/scene/resources/mesh_library.cpp index 7d51a2617e..833a4c3d22 100644 --- a/scene/resources/mesh_library.cpp +++ b/scene/resources/mesh_library.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -43,9 +43,15 @@ bool MeshLibrary::_set(const StringName &p_name, const Variant &p_value) { set_item_name(idx, p_value); else if (what == "mesh") set_item_mesh(idx, p_value); - else if (what == "shape") - set_item_shape(idx, p_value); - else if (what == "preview") + else if (what == "shape") { + Vector<ShapeData> shapes; + ShapeData sd; + sd.shape = p_value; + shapes.push_back(sd); + set_item_shapes(idx, shapes); + } else if (what == "shapes") { + _set_item_shapes(idx, p_value); + } else if (what == "preview") set_item_preview(idx, p_value); else if (what == "navmesh") set_item_navmesh(idx, p_value); @@ -69,8 +75,8 @@ bool MeshLibrary::_get(const StringName &p_name, Variant &r_ret) const { r_ret = get_item_name(idx); else if (what == "mesh") r_ret = get_item_mesh(idx); - else if (what == "shape") - r_ret = get_item_shape(idx); + else if (what == "shapes") + r_ret = _get_item_shapes(idx); else if (what == "navmesh") r_ret = get_item_navmesh(idx); else if (what == "preview") @@ -88,7 +94,7 @@ void MeshLibrary::_get_property_list(List<PropertyInfo> *p_list) const { String name = "item/" + itos(E->key()) + "/"; p_list->push_back(PropertyInfo(Variant::STRING, name + "name")); p_list->push_back(PropertyInfo(Variant::OBJECT, name + "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh")); - p_list->push_back(PropertyInfo(Variant::OBJECT, name + "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape")); + p_list->push_back(PropertyInfo(Variant::ARRAY, name + "shapes")); p_list->push_back(PropertyInfo(Variant::OBJECT, name + "navmesh", PROPERTY_HINT_RESOURCE_TYPE, "NavigationMesh")); p_list->push_back(PropertyInfo(Variant::OBJECT, name + "preview", PROPERTY_HINT_RESOURCE_TYPE, "Texture", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_EDITOR_HELPER)); } @@ -118,10 +124,10 @@ void MeshLibrary::set_item_mesh(int p_item, const Ref<Mesh> &p_mesh) { _change_notify(); } -void MeshLibrary::set_item_shape(int p_item, const Ref<Shape> &p_shape) { +void MeshLibrary::set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes) { ERR_FAIL_COND(!item_map.has(p_item)); - item_map[p_item].shape = p_shape; + item_map[p_item].shapes = p_shapes; _change_notify(); notify_change_to_owners(); emit_changed(); @@ -156,10 +162,10 @@ Ref<Mesh> MeshLibrary::get_item_mesh(int p_item) const { return item_map[p_item].mesh; } -Ref<Shape> MeshLibrary::get_item_shape(int p_item) const { +Vector<MeshLibrary::ShapeData> MeshLibrary::get_item_shapes(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), Ref<Shape>()); - return item_map[p_item].shape; + ERR_FAIL_COND_V(!item_map.has(p_item), Vector<ShapeData>()); + return item_map[p_item].shapes; } Ref<NavigationMesh> MeshLibrary::get_item_navmesh(int p_item) const { @@ -208,7 +214,7 @@ Vector<int> MeshLibrary::get_item_list() const { return ret; } -int MeshLibrary::find_item_name(const String &p_name) const { +int MeshLibrary::find_item_by_name(const String &p_name) const { for (Map<int, Item>::Element *E = item_map.front(); E; E = E->next()) { @@ -226,18 +232,51 @@ int MeshLibrary::get_last_unused_item_id() const { return item_map.back()->key() + 1; } +void MeshLibrary::_set_item_shapes(int p_item, const Array &p_shapes) { + + ERR_FAIL_COND(p_shapes.size() & 1); + Vector<ShapeData> shapes; + for (int i = 0; i < p_shapes.size(); i += 2) { + ShapeData sd; + sd.shape = p_shapes[i + 0]; + sd.local_transform = p_shapes[i + 1]; + + if (sd.shape.is_valid()) { + shapes.push_back(sd); + } + } + + set_item_shapes(p_item, shapes); +} + +Array MeshLibrary::_get_item_shapes(int p_item) const { + + Vector<ShapeData> shapes = get_item_shapes(p_item); + Array ret; + for (int i = 0; i < shapes.size(); i++) { + ret.push_back(shapes[i].shape); + ret.push_back(shapes[i].local_transform); + } + + return ret; +} + void MeshLibrary::_bind_methods() { ClassDB::bind_method(D_METHOD("create_item", "id"), &MeshLibrary::create_item); ClassDB::bind_method(D_METHOD("set_item_name", "id", "name"), &MeshLibrary::set_item_name); ClassDB::bind_method(D_METHOD("set_item_mesh", "id", "mesh"), &MeshLibrary::set_item_mesh); ClassDB::bind_method(D_METHOD("set_item_navmesh", "id", "navmesh"), &MeshLibrary::set_item_navmesh); - ClassDB::bind_method(D_METHOD("set_item_shape", "id", "shape"), &MeshLibrary::set_item_shape); + ClassDB::bind_method(D_METHOD("set_item_shapes", "id", "shapes"), &MeshLibrary::_set_item_shapes); + ClassDB::bind_method(D_METHOD("set_item_preview", "id", "texture"), &MeshLibrary::set_item_preview); ClassDB::bind_method(D_METHOD("get_item_name", "id"), &MeshLibrary::get_item_name); ClassDB::bind_method(D_METHOD("get_item_mesh", "id"), &MeshLibrary::get_item_mesh); ClassDB::bind_method(D_METHOD("get_item_navmesh", "id"), &MeshLibrary::get_item_navmesh); - ClassDB::bind_method(D_METHOD("get_item_shape", "id"), &MeshLibrary::get_item_shape); + ClassDB::bind_method(D_METHOD("get_item_shapes", "id"), &MeshLibrary::_get_item_shapes); + ClassDB::bind_method(D_METHOD("get_item_preview", "id"), &MeshLibrary::get_item_preview); ClassDB::bind_method(D_METHOD("remove_item", "id"), &MeshLibrary::remove_item); + ClassDB::bind_method(D_METHOD("find_item_by_name", "name"), &MeshLibrary::find_item_by_name); + ClassDB::bind_method(D_METHOD("clear"), &MeshLibrary::clear); ClassDB::bind_method(D_METHOD("get_item_list"), &MeshLibrary::get_item_list); ClassDB::bind_method(D_METHOD("get_last_unused_item_id"), &MeshLibrary::get_last_unused_item_id); diff --git a/scene/resources/mesh_library.h b/scene/resources/mesh_library.h index cc39110a99..c5d23ce50f 100644 --- a/scene/resources/mesh_library.h +++ b/scene/resources/mesh_library.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -41,16 +41,24 @@ class MeshLibrary : public Resource { GDCLASS(MeshLibrary, Resource); RES_BASE_EXTENSION("meshlib"); +public: + struct ShapeData { + Ref<Shape> shape; + Transform local_transform; + }; struct Item { String name; Ref<Mesh> mesh; - Ref<Shape> shape; + Vector<ShapeData> shapes; Ref<Texture> preview; Ref<NavigationMesh> navmesh; }; Map<int, Item> item_map; + void _set_item_shapes(int p_item, const Array &p_shapes); + Array _get_item_shapes(int p_item) const; + protected: bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; @@ -63,12 +71,12 @@ public: void set_item_name(int p_item, const String &p_name); void set_item_mesh(int p_item, const Ref<Mesh> &p_mesh); void set_item_navmesh(int p_item, const Ref<NavigationMesh> &p_navmesh); - void set_item_shape(int p_item, const Ref<Shape> &p_shape); + void set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes); void set_item_preview(int p_item, const Ref<Texture> &p_preview); String get_item_name(int p_item) const; Ref<Mesh> get_item_mesh(int p_item) const; Ref<NavigationMesh> get_item_navmesh(int p_item) const; - Ref<Shape> get_item_shape(int p_item) const; + Vector<ShapeData> get_item_shapes(int p_item) const; Ref<Texture> get_item_preview(int p_item) const; void remove_item(int p_item); @@ -76,7 +84,7 @@ public: void clear(); - int find_item_name(const String &p_name) const; + int find_item_by_name(const String &p_name) const; Vector<int> get_item_list() const; int get_last_unused_item_id() const; diff --git a/scene/resources/multimesh.cpp b/scene/resources/multimesh.cpp index b65800ebbd..15f1e15542 100644 --- a/scene/resources/multimesh.cpp +++ b/scene/resources/multimesh.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/multimesh.h b/scene/resources/multimesh.h index 7d6a0ce44f..7ca66b0b46 100644 --- a/scene/resources/multimesh.h +++ b/scene/resources/multimesh.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index d7ea675a47..c525ca600a 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,6 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "packed_scene.h" + #include "core/core_string_names.h" #include "io/resource_loader.h" #include "project_settings.h" @@ -35,6 +36,7 @@ #include "scene/3d/spatial.h" #include "scene/gui/control.h" #include "scene/main/instance_placeholder.h" + #define PACK_VERSION 2 bool SceneState::can_instance() const { @@ -143,7 +145,7 @@ Node *SceneState::instance(GenEditState p_edit_state) const { node = parent->_get_child_by_name(snames[n.name]); #ifdef DEBUG_ENABLED if (!node) { - WARN_PRINT(String("Node '" + String(ret_nodes[0]->get_path_to(parent)) + "/" + String(snames[n.name]) + "' was modified from inside a instance, but it has vanished.").ascii().get_data()); + WARN_PRINT(String("Node '" + String(ret_nodes[0]->get_path_to(parent)) + "/" + String(snames[n.name]) + "' was modified from inside an instance, but it has vanished.").ascii().get_data()); } #endif } @@ -151,18 +153,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 +174,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)); @@ -451,60 +453,6 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map } } -#if 0 - - Ref<SceneState> base_scene = p_node->get_scene_inherited_state(); //for inheritance - Ref<SceneState> instance_state; - int instance_state_node=-1; - - if (base_scene.is_valid() && (p_node==p_owner || p_node->get_owner()==p_owner)) { - //scene inheritance in use, see if this node is actually inherited - NodePath path = p_owner->get_path_to(p_node); - instance_state_node = base_scene->find_node_by_path(path); - if (instance_state_node>=0) { - instance_state=base_scene; - } - } - - // check that this is a directly instanced scene from the scene being packed, if so - // this information must be saved. Of course, if using scene instancing and this node - // does belong to base scene, ignore. - - if (instance_state.is_null() && p_node!=p_owner && p_node->get_owner()==p_owner && p_node->get_filename()!="") { - - //instanced, only direct sub-scnes are supported of course - Ref<PackedScene> instance = ResourceLoader::load(p_node->get_filename()); - if (!instance.is_valid()) { - return ERR_CANT_OPEN; - } - - nd.instance=_vm_get_variant(instance,variant_map); - - } else { - - nd.instance=-1; - } - - // finally, if this does not belong to scene inheritance, check - // if it belongs to scene instancing - - if (instance_state.is_null() && p_node!=p_owner) { - //if not affected by scene inheritance, this may be - if (p_node->get_owner()==p_owner && p_node->get_filename()!=String()) { - instance_state=p_node->get_scene_instance_state(); - if (instance_state.is_valid()) { - instance_state_node=instance_state->find_node_by_path(p_node->get_path_to(p_node)); - } - - } else if (p_node->get_owner()!=p_owner && p_owner->is_editable_instance(p_node->get_owner())) { - instance_state=p_node->get_owner()->get_scene_instance_state(); - if (instance_state.is_valid()) { - instance_state_node=instance_state->find_node_by_path(p_node->get_owner()->get_path_to(p_node)); - } - } - } -#endif - // all setup, we then proceed to check all properties for the node // and save the ones that are worth saving @@ -641,27 +589,6 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map } else { nd.owner = -1; -#if 0 - // this is pointless, if this was instanced by something else, - // the owner will already be set. - - if (node_map.has(p_node->get_owner())) { - //maybe an existing saved node - nd.owner=node_map[p_node->get_owner()]; - } else { - //not saved, use nodepath map - int sidx; - if (nodepath_map.has(p_node->get_owner())) { - sidx=nodepath_map[p_node->get_owner()]; - } else { - sidx=nodepath_map.size(); - nodepath_map[p_node->get_owner()]=sidx; - } - - nd.owner=FLAG_ID_IS_PATH|sidx; - - } -#endif } // Save the right type. If this node was created by an instance @@ -754,7 +681,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/packed_scene.h b/scene/resources/packed_scene.h index 2f18f5c263..20bfb19b1f 100644 --- a/scene/resources/packed_scene.h +++ b/scene/resources/packed_scene.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/plane_shape.cpp b/scene/resources/plane_shape.cpp index d3ad454afc..2b1e890a5d 100644 --- a/scene/resources/plane_shape.cpp +++ b/scene/resources/plane_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/plane_shape.h b/scene/resources/plane_shape.h index 2ed297a97e..1384b7521b 100644 --- a/scene/resources/plane_shape.h +++ b/scene/resources/plane_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/polygon_path_finder.cpp b/scene/resources/polygon_path_finder.cpp index 80b413630a..053369e8d8 100644 --- a/scene/resources/polygon_path_finder.cpp +++ b/scene/resources/polygon_path_finder.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/polygon_path_finder.h b/scene/resources/polygon_path_finder.h index 2d2fb1678e..9b760caa2e 100644 --- a/scene/resources/polygon_path_finder.h +++ b/scene/resources/polygon_path_finder.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp index 2b8c0ddedd..cfc1468533 100644 --- a/scene/resources/primitive_meshes.cpp +++ b/scene/resources/primitive_meshes.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/primitive_meshes.h b/scene/resources/primitive_meshes.h index bcd5d30dd3..34fb75a196 100644 --- a/scene/resources/primitive_meshes.h +++ b/scene/resources/primitive_meshes.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/ray_shape.cpp b/scene/resources/ray_shape.cpp index 3abb2a4fa1..ccce7660c6 100644 --- a/scene/resources/ray_shape.cpp +++ b/scene/resources/ray_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/ray_shape.h b/scene/resources/ray_shape.h index 5a17e9414e..06b68adbae 100644 --- a/scene/resources/ray_shape.h +++ b/scene/resources/ray_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/rectangle_shape_2d.cpp b/scene/resources/rectangle_shape_2d.cpp index bd9ec8cbc4..507dbce861 100644 --- a/scene/resources/rectangle_shape_2d.cpp +++ b/scene/resources/rectangle_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/rectangle_shape_2d.h b/scene/resources/rectangle_shape_2d.h index 23db58ba07..81d9cb1f4a 100644 --- a/scene/resources/rectangle_shape_2d.h +++ b/scene/resources/rectangle_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/room.cpp b/scene/resources/room.cpp index c89b7c72c7..487975dd4e 100644 --- a/scene/resources/room.cpp +++ b/scene/resources/room.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -31,6 +31,8 @@ #include "servers/visual_server.h" +// FIXME: Left for reference for reimplementation using Area +#if 0 RID RoomBounds::get_rid() const { return area; @@ -64,3 +66,4 @@ RoomBounds::~RoomBounds() { VisualServer::get_singleton()->free(area); } +#endif diff --git a/scene/resources/room.h b/scene/resources/room.h index ba5c0eee1c..aadee858c2 100644 --- a/scene/resources/room.h +++ b/scene/resources/room.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -36,6 +36,9 @@ @author Juan Linietsky <reduzio@gmail.com> */ +//left for reference but will be removed when portals are reimplemented using Area +#if 0 + class RoomBounds : public Resource { GDCLASS(RoomBounds, Resource); @@ -57,4 +60,5 @@ public: ~RoomBounds(); }; +#endif #endif // ROOM_H diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp index 49cd030a9a..14e2ef83f8 100644 --- a/scene/resources/scene_format_text.cpp +++ b/scene/resources/scene_format_text.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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; @@ -891,7 +891,7 @@ String ResourceInteractiveLoaderText::recognize(FileAccess *p_f) { ///////////////////// -Ref<ResourceInteractiveLoader> ResourceFormatLoaderText::load_interactive(const String &p_path, Error *r_error) { +Ref<ResourceInteractiveLoader> ResourceFormatLoaderText::load_interactive(const String &p_path, const String &p_original_path, Error *r_error) { if (r_error) *r_error = ERR_CANT_OPEN; @@ -905,7 +905,8 @@ Ref<ResourceInteractiveLoader> ResourceFormatLoaderText::load_interactive(const } Ref<ResourceInteractiveLoaderText> ria = memnew(ResourceInteractiveLoaderText); - ria->local_path = ProjectSettings::get_singleton()->localize_path(p_path); + String path = p_original_path != "" ? p_original_path : p_path; + ria->local_path = ProjectSettings::get_singleton()->localize_path(path); ria->res_path = ria->local_path; //ria->set_local_path( ProjectSettings::get_singleton()->localize_path(p_path) ); ria->open(f); diff --git a/scene/resources/scene_format_text.h b/scene/resources/scene_format_text.h index 1ea6465c21..a72a62037c 100644 --- a/scene/resources/scene_format_text.h +++ b/scene/resources/scene_format_text.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -108,7 +108,7 @@ public: class ResourceFormatLoaderText : public ResourceFormatLoader { public: - virtual Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, Error *r_error = NULL); + virtual Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); virtual void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const; virtual void get_recognized_extensions(List<String> *p_extensions) const; virtual bool handles_type(const String &p_type) const; diff --git a/scene/resources/segment_shape_2d.cpp b/scene/resources/segment_shape_2d.cpp index 99062d693b..1171db5c02 100644 --- a/scene/resources/segment_shape_2d.cpp +++ b/scene/resources/segment_shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/segment_shape_2d.h b/scene/resources/segment_shape_2d.h index 22fc1ab6e3..eb9c228c83 100644 --- a/scene/resources/segment_shape_2d.h +++ b/scene/resources/segment_shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index acd04a9321..ec41630258 100644 --- a/scene/resources/shader.cpp +++ b/scene/resources/shader.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shader.h b/scene/resources/shader.h index 0e8e48d82e..5cc70629c7 100644 --- a/scene/resources/shader.h +++ b/scene/resources/shader.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shader_graph.cpp b/scene/resources/shader_graph.cpp index ed63e84d4c..2ca9a14562 100644 --- a/scene/resources/shader_graph.cpp +++ b/scene/resources/shader_graph.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,8 +28,10 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "shader_graph.h" + #include "scene/scene_string_names.h" +// FIXME: Needs to be ported to the new 3.0 shader API #if 0 Array ShaderGraph::_get_node_list(ShaderType p_type) const { @@ -397,79 +399,6 @@ void ShaderGraph::_bind_methods() { BIND_ENUM_CONSTANT( VEC_MAX_FUNC ); ADD_SIGNAL(MethodInfo("updated")); - -#if 0 - ClassDB::bind_method(D_METHOD("node_add"),&ShaderGraph::node_add ); - ClassDB::bind_method(D_METHOD("node_remove"),&ShaderGraph::node_remove ); - ClassDB::bind_method(D_METHOD("node_set_param"),&ShaderGraph::node_set_param ); - ClassDB::bind_method(D_METHOD("node_set_pos"),&ShaderGraph::node_set_pos ); - - ClassDB::bind_method(D_METHOD("node_get_pos"),&ShaderGraph::node_get_pos ); - ClassDB::bind_method(D_METHOD("node_get_param"),&ShaderGraph::node_get_param); - ClassDB::bind_method(D_METHOD("node_get_type"),&ShaderGraph::node_get_type); - - ClassDB::bind_method(D_METHOD("connect"),&ShaderGraph::connect ); - ClassDB::bind_method(D_METHOD("disconnect"),&ShaderGraph::disconnect ); - - ClassDB::bind_method(D_METHOD("get_connections"),&ShaderGraph::_get_connections_helper ); - - ClassDB::bind_method(D_METHOD("clear"),&ShaderGraph::clear ); - - BIND_ENUM_CONSTANT( NODE_IN ); ///< param 0: name - BIND_ENUM_CONSTANT( NODE_OUT ); ///< param 0: name - BIND_ENUM_CONSTANT( NODE_CONSTANT ); ///< param 0: value - BIND_ENUM_CONSTANT( NODE_PARAMETER ); ///< param 0: name - BIND_ENUM_CONSTANT( NODE_ADD ); - BIND_ENUM_CONSTANT( NODE_SUB ); - BIND_ENUM_CONSTANT( NODE_MUL ); - BIND_ENUM_CONSTANT( NODE_DIV ); - BIND_ENUM_CONSTANT( NODE_MOD ); - BIND_ENUM_CONSTANT( NODE_SIN ); - BIND_ENUM_CONSTANT( NODE_COS ); - BIND_ENUM_CONSTANT( NODE_TAN ); - BIND_ENUM_CONSTANT( NODE_ARCSIN ); - BIND_ENUM_CONSTANT( NODE_ARCCOS ); - BIND_ENUM_CONSTANT( NODE_ARCTAN ); - BIND_ENUM_CONSTANT( NODE_POW ); - BIND_ENUM_CONSTANT( NODE_LOG ); - BIND_ENUM_CONSTANT( NODE_MAX ); - BIND_ENUM_CONSTANT( NODE_MIN ); - BIND_ENUM_CONSTANT( NODE_COMPARE ); - BIND_ENUM_CONSTANT( NODE_TEXTURE ); ///< param 0: texture - BIND_ENUM_CONSTANT( NODE_TIME ); ///< param 0: interval length - BIND_ENUM_CONSTANT( NODE_NOISE ); - BIND_ENUM_CONSTANT( NODE_PASS ); - BIND_ENUM_CONSTANT( NODE_VEC_IN ); ///< param 0: name - BIND_ENUM_CONSTANT( NODE_VEC_OUT ); ///< param 0: name - BIND_ENUM_CONSTANT( NODE_VEC_CONSTANT ); ///< param 0: value - BIND_ENUM_CONSTANT( NODE_VEC_PARAMETER ); ///< param 0: name - BIND_ENUM_CONSTANT( NODE_VEC_ADD ); - BIND_ENUM_CONSTANT( NODE_VEC_SUB ); - BIND_ENUM_CONSTANT( NODE_VEC_MUL ); - BIND_ENUM_CONSTANT( NODE_VEC_DIV ); - BIND_ENUM_CONSTANT( NODE_VEC_MOD ); - BIND_ENUM_CONSTANT( NODE_VEC_CROSS ); - BIND_ENUM_CONSTANT( NODE_VEC_DOT ); - BIND_ENUM_CONSTANT( NODE_VEC_POW ); - BIND_ENUM_CONSTANT( NODE_VEC_NORMALIZE ); - BIND_ENUM_CONSTANT( NODE_VEC_TRANSFORM3 ); - BIND_ENUM_CONSTANT( NODE_VEC_TRANSFORM4 ); - BIND_ENUM_CONSTANT( NODE_VEC_COMPARE ); - BIND_ENUM_CONSTANT( NODE_VEC_TEXTURE_2D ); - BIND_ENUM_CONSTANT( NODE_VEC_TEXTURE_CUBE ); - BIND_ENUM_CONSTANT( NODE_VEC_NOISE ); - BIND_ENUM_CONSTANT( NODE_VEC_0 ); - BIND_ENUM_CONSTANT( NODE_VEC_1 ); - BIND_ENUM_CONSTANT( NODE_VEC_2 ); - BIND_ENUM_CONSTANT( NODE_VEC_BUILD ); - BIND_ENUM_CONSTANT( NODE_VEC_PASS ); - BIND_ENUM_CONSTANT( NODE_COLOR_CONSTANT ); - BIND_ENUM_CONSTANT( NODE_COLOR_PARAMETER ); - BIND_ENUM_CONSTANT( NODE_TEXTURE_PARAMETER ); - BIND_ENUM_CONSTANT( NODE_TEXTURE_2D_PARAMETER ); - BIND_ENUM_CONSTANT( NODE_TEXTURE_CUBE_PARAMETER ); - BIND_ENUM_CONSTANT( NODE_TYPE_MAX ); -#endif } diff --git a/scene/resources/shader_graph.h b/scene/resources/shader_graph.h index 36578ce1f7..9a74b6c53a 100644 --- a/scene/resources/shader_graph.h +++ b/scene/resources/shader_graph.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -30,6 +30,7 @@ #ifndef SHADER_GRAPH_H #define SHADER_GRAPH_H +// FIXME: Needs to be ported to the new 3.0 shader API #if 0 #include "map.h" #include "scene/resources/shader.h" diff --git a/scene/resources/shape.cpp b/scene/resources/shape.cpp index 6be88374e5..0046ff58a8 100644 --- a/scene/resources/shape.cpp +++ b/scene/resources/shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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/shape.h b/scene/resources/shape.h index c15638aeed..bc75e723e9 100644 --- a/scene/resources/shape.h +++ b/scene/resources/shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shape_2d.cpp b/scene/resources/shape_2d.cpp index 818c749e8c..4423c78bbe 100644 --- a/scene/resources/shape_2d.cpp +++ b/scene/resources/shape_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shape_2d.h b/scene/resources/shape_2d.h index c020fb9141..fffc7011f1 100644 --- a/scene/resources/shape_2d.h +++ b/scene/resources/shape_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shape_line_2d.cpp b/scene/resources/shape_line_2d.cpp index c38ae04eff..4dcc5ac981 100644 --- a/scene/resources/shape_line_2d.cpp +++ b/scene/resources/shape_line_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/shape_line_2d.h b/scene/resources/shape_line_2d.h index 3e59bbc687..68298b63be 100644 --- a/scene/resources/shape_line_2d.h +++ b/scene/resources/shape_line_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/sky_box.cpp b/scene/resources/sky_box.cpp index b7f2feb58d..9af8c42110 100644 --- a/scene/resources/sky_box.cpp +++ b/scene/resources/sky_box.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/sky_box.h b/scene/resources/sky_box.h index 9bd60cddaf..8934463b6f 100644 --- a/scene/resources/sky_box.h +++ b/scene/resources/sky_box.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/space_2d.cpp b/scene/resources/space_2d.cpp index 2a618bb868..4177364de7 100644 --- a/scene/resources/space_2d.cpp +++ b/scene/resources/space_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/space_2d.h b/scene/resources/space_2d.h index 3e08612d99..8ba392f85d 100644 --- a/scene/resources/space_2d.h +++ b/scene/resources/space_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/sphere_shape.cpp b/scene/resources/sphere_shape.cpp index 960554562f..00203c2b4b 100644 --- a/scene/resources/sphere_shape.cpp +++ b/scene/resources/sphere_shape.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/sphere_shape.h b/scene/resources/sphere_shape.h index a3b5d2424b..43d7956246 100644 --- a/scene/resources/sphere_shape.h +++ b/scene/resources/sphere_shape.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp index 7b2a9ffbc2..b8a0a7864e 100644 --- a/scene/resources/style_box.cpp +++ b/scene/resources/style_box.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -165,13 +165,13 @@ void StyleBoxTexture::draw(RID p_canvas_item, const Rect2 &p_rect) const { VisualServer::get_singleton()->canvas_item_add_nine_patch(p_canvas_item, rect, src_rect, texture->get_rid(), Vector2(margin[MARGIN_LEFT], margin[MARGIN_TOP]), Vector2(margin[MARGIN_RIGHT], margin[MARGIN_BOTTOM]), VS::NinePatchAxisMode(axis_h), VS::NinePatchAxisMode(axis_v), draw_center, modulate, normal_rid); } -void StyleBoxTexture::set_draw_center(bool p_draw) { +void StyleBoxTexture::set_draw_center(bool p_enabled) { - draw_center = p_draw; + draw_center = p_enabled; emit_changed(); } -bool StyleBoxTexture::get_draw_center() const { +bool StyleBoxTexture::is_draw_center_enabled() const { return draw_center; } @@ -281,7 +281,7 @@ void StyleBoxTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("get_region_rect"), &StyleBoxTexture::get_region_rect); ClassDB::bind_method(D_METHOD("set_draw_center", "enable"), &StyleBoxTexture::set_draw_center); - ClassDB::bind_method(D_METHOD("get_draw_center"), &StyleBoxTexture::get_draw_center); + ClassDB::bind_method(D_METHOD("is_draw_center_enabled"), &StyleBoxTexture::is_draw_center_enabled); ClassDB::bind_method(D_METHOD("set_modulate", "color"), &StyleBoxTexture::set_modulate); ClassDB::bind_method(D_METHOD("get_modulate"), &StyleBoxTexture::get_modulate); @@ -312,7 +312,7 @@ void StyleBoxTexture::_bind_methods() { ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "axis_stretch_vertical", PROPERTY_HINT_ENUM, "Stretch,Tile,Tile Fit"), "set_v_axis_stretch_mode", "get_v_axis_stretch_mode"); ADD_GROUP("Modulate", "modulate_"); ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate_color"), "set_modulate", "get_modulate"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "get_draw_center"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "is_draw_center_enabled"); BIND_ENUM_CONSTANT(AXIS_STRETCH_MODE_STRETCH); BIND_ENUM_CONSTANT(AXIS_STRETCH_MODE_TILE); @@ -460,14 +460,14 @@ float StyleBoxFlat::get_expand_margin_size(Margin p_expand_margin) const { return expand_margin[p_expand_margin]; } -void StyleBoxFlat::set_filled(bool p_filled) { +void StyleBoxFlat::set_draw_center(bool p_enabled) { - filled = p_filled; + draw_center = p_enabled; emit_changed(); } -bool StyleBoxFlat::is_filled() const { +bool StyleBoxFlat::is_draw_center_enabled() const { - return filled; + return draw_center; } void StyleBoxFlat::set_shadow_color(const Color &p_color) { @@ -691,7 +691,7 @@ void StyleBoxFlat::draw(RID p_canvas_item, const Rect2 &p_rect) const { style_rect, adapted_border, inner_color, border_color.read().ptr(), corner_detail); //DRAW INFILL - if (filled) { + if (draw_center) { int temp_vert_offset = verts.size(); int no_border[4] = { 0, 0, 0, 0 }; draw_ring(verts, indices, colors, style_rect, adapted_corner, @@ -724,7 +724,7 @@ void StyleBoxFlat::draw(RID p_canvas_item, const Rect2 &p_rect) const { int aa_border_width[4] = { aa_size, aa_size, aa_size, aa_size }; - if (filled) { + if (draw_center) { if (!blend_border) { //INFILL AA draw_ring(verts, indices, colors, style_rect, adapted_corner, @@ -776,8 +776,8 @@ void StyleBoxFlat::_bind_methods() { ClassDB::bind_method(D_METHOD("set_expand_margin_individual", "size_left", "size_top", "size_right", "size_bottom"), &StyleBoxFlat::set_expand_margin_size_individual); ClassDB::bind_method(D_METHOD("get_expand_margin", "margin"), &StyleBoxFlat::get_expand_margin_size); - ClassDB::bind_method(D_METHOD("set_filled", "filled"), &StyleBoxFlat::set_filled); - ClassDB::bind_method(D_METHOD("is_filled"), &StyleBoxFlat::is_filled); + ClassDB::bind_method(D_METHOD("set_draw_center", "draw_center"), &StyleBoxFlat::set_draw_center); + ClassDB::bind_method(D_METHOD("is_draw_center_enabled"), &StyleBoxFlat::is_draw_center_enabled); ClassDB::bind_method(D_METHOD("set_shadow_color", "color"), &StyleBoxFlat::set_shadow_color); ClassDB::bind_method(D_METHOD("get_shadow_color"), &StyleBoxFlat::get_shadow_color); @@ -796,7 +796,7 @@ void StyleBoxFlat::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::COLOR, "bg_color"), "set_bg_color", "get_bg_color"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filled"), "set_filled", "is_filled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "draw_center"), "set_draw_center", "is_draw_center_enabled"); ADD_GROUP("Border Width", "border_width_"); ADD_PROPERTYI(PropertyInfo(Variant::INT, "border_width_left", PROPERTY_HINT_RANGE, "0,1024,1"), "set_border_width", "get_border_width", MARGIN_LEFT); @@ -843,7 +843,7 @@ StyleBoxFlat::StyleBoxFlat() { border_color.append(Color(0.8, 0.8, 0.8)); blend_border = false; - filled = true; + draw_center = true; anti_aliased = true; shadow_size = 0; diff --git a/scene/resources/style_box.h b/scene/resources/style_box.h index 30eb9543e8..3d085f7166 100644 --- a/scene/resources/style_box.h +++ b/scene/resources/style_box.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -117,8 +117,8 @@ public: void set_normal_map(RES p_normal_map); RES get_normal_map() const; - void set_draw_center(bool p_draw); - bool get_draw_center() const; + void set_draw_center(bool p_enabled); + bool is_draw_center_enabled() const; virtual Size2 get_center_size() const; void set_h_axis_stretch_mode(AxisStretchMode p_mode); @@ -150,7 +150,7 @@ class StyleBoxFlat : public StyleBox { int expand_margin[4]; int corner_radius[4]; - bool filled; + bool draw_center; bool blend_border; bool anti_aliased; @@ -202,9 +202,9 @@ public: void set_expand_margin_size_individual(float p_left, float p_top, float p_right, float p_bottom); float get_expand_margin_size(Margin p_expand_margin) const; - //FILLED - void set_filled(bool p_draw); - bool is_filled() const; + //DRAW CENTER + void set_draw_center(bool p_enabled); + bool is_draw_center_enabled() const; //SHADOW void set_shadow_color(const Color &p_color); diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp index 9320676016..bf89e704bc 100644 --- a/scene/resources/surface_tool.cpp +++ b/scene/resources/surface_tool.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -691,6 +691,17 @@ void SurfaceTool::mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvT fvTexcOut[1] = v.y; //fvTexcOut[1]=1.0-v.y; } + +void SurfaceTool::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, + const tbool bIsOrientationPreserving, const int iFace, const int iVert) { + + Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); + Vertex *vtx = &varr[iFace * 3 + iVert]->get(); + + vtx->tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); + vtx->binormal = Vector3(fvBiTangent[0], fvBiTangent[1], fvBiTangent[2]); +} + void SurfaceTool::mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert) { Vector<List<Vertex>::Element *> &varr = *((Vector<List<Vertex>::Element *> *)pContext->m_pUserData); @@ -715,8 +726,8 @@ void SurfaceTool::generate_tangents() { mkif.m_getNumVerticesOfFace = mikktGetNumVerticesOfFace; mkif.m_getPosition = mikktGetPosition; mkif.m_getTexCoord = mikktGetTexCoord; - mkif.m_setTSpaceBasic = mikktSetTSpaceBasic; - mkif.m_setTSpace = NULL; + mkif.m_setTSpace = mikktSetTSpaceDefault; + mkif.m_setTSpaceBasic = NULL; SMikkTSpaceContext msc; msc.m_pInterface = &mkif; diff --git a/scene/resources/surface_tool.h b/scene/resources/surface_tool.h index fcc94753ca..cdaac643de 100644 --- a/scene/resources/surface_tool.h +++ b/scene/resources/surface_tool.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -90,6 +90,8 @@ private: static void mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert); static void mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert); static void mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert); + static void mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, + const tbool bIsOrientationPreserving, const int iFace, const int iVert); protected: static void _bind_methods(); diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index f542d2a8de..6a9ded9ea3 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -501,9 +501,9 @@ Error StreamTexture::_load_data(const String &p_path, int &tw, int &th, int &fla Vector<Ref<Image> > mipmap_images; int total_size = 0; - for (int i = 0; i < mipmaps; i++) { + for (uint32_t i = 0; i < mipmaps; i++) { - if (i > 0) { + if (i) { size = f->get_32(); } diff --git a/scene/resources/texture.h b/scene/resources/texture.h index 6c20c71af0..207436e4a7 100644 --- a/scene/resources/texture.h +++ b/scene/resources/texture.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp index ac1bb105ac..e2e29b037b 100644 --- a/scene/resources/theme.cpp +++ b/scene/resources/theme.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -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); diff --git a/scene/resources/theme.h b/scene/resources/theme.h index 5744c142d4..5b375d5585 100644 --- a/scene/resources/theme.h +++ b/scene/resources/theme.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index 44fe676ddc..50e8c28c22 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h index 7d7855811f..fe782ff987 100644 --- a/scene/resources/tile_set.h +++ b/scene/resources/tile_set.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/video_stream.cpp b/scene/resources/video_stream.cpp index 1b0e34b8db..2298e2ca9f 100644 --- a/scene/resources/video_stream.cpp +++ b/scene/resources/video_stream.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/video_stream.h b/scene/resources/video_stream.h index 544973f581..e08be02a07 100644 --- a/scene/resources/video_stream.h +++ b/scene/resources/video_stream.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -30,7 +30,6 @@ #ifndef VIDEO_STREAM_H #define VIDEO_STREAM_H -#include "audio_stream_resampled.h" #include "scene/resources/texture.h" class VideoStreamPlayback : public Resource { diff --git a/scene/resources/world.cpp b/scene/resources/world.cpp index b0d14125a0..af159975ca 100644 --- a/scene/resources/world.cpp +++ b/scene/resources/world.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ @@ -28,10 +28,10 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "world.h" + #include "camera_matrix.h" #include "octree.h" #include "scene/3d/camera.h" -#include "scene/3d/spatial_indexer.h" #include "scene/3d/visibility_notifier.h" #include "scene/scene_string_names.h" diff --git a/scene/resources/world.h b/scene/resources/world.h index 158086974c..767d1b5b6e 100644 --- a/scene/resources/world.h +++ b/scene/resources/world.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp index 2f43f903ba..a644793bd8 100644 --- a/scene/resources/world_2d.cpp +++ b/scene/resources/world_2d.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/resources/world_2d.h b/scene/resources/world_2d.h index f968b08a15..63d32473e0 100644 --- a/scene/resources/world_2d.h +++ b/scene/resources/world_2d.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/scene_string_names.cpp b/scene/scene_string_names.cpp index f247e7cde8..6b7168a529 100644 --- a/scene/scene_string_names.cpp +++ b/scene/scene_string_names.cpp @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ diff --git a/scene/scene_string_names.h b/scene/scene_string_names.h index 0b70cd36ff..8676b8436e 100644 --- a/scene/scene_string_names.h +++ b/scene/scene_string_names.h @@ -3,7 +3,7 @@ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ -/* http://www.godotengine.org */ +/* https://godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */ /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */ |