summaryrefslogtreecommitdiffstats
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/2d/tile_map_layer.h2
-rw-r--r--scene/3d/audio_stream_player_3d.cpp11
-rw-r--r--scene/3d/audio_stream_player_3d.h1
-rw-r--r--scene/animation/animation_blend_tree.cpp6
-rw-r--r--scene/gui/color_mode.h14
-rw-r--r--scene/gui/line_edit.cpp1
-rw-r--r--scene/gui/rich_text_label.cpp1
-rw-r--r--scene/gui/tab_bar.cpp1
-rw-r--r--scene/gui/tab_container.cpp9
-rw-r--r--scene/gui/text_edit.cpp1
-rw-r--r--scene/main/node.cpp47
-rw-r--r--scene/main/node.h8
-rw-r--r--scene/main/viewport.cpp2
-rw-r--r--scene/resources/2d/tile_set.h38
-rw-r--r--scene/resources/3d/primitive_meshes.h6
-rw-r--r--scene/resources/camera_attributes.h2
16 files changed, 114 insertions, 36 deletions
diff --git a/scene/2d/tile_map_layer.h b/scene/2d/tile_map_layer.h
index cc0a5b49fb..6cb481849c 100644
--- a/scene/2d/tile_map_layer.h
+++ b/scene/2d/tile_map_layer.h
@@ -90,7 +90,7 @@ public:
TerrainConstraint(Ref<TileSet> p_tile_set, const Vector2i &p_position, int p_terrain); // For the center terrain bit
TerrainConstraint(Ref<TileSet> p_tile_set, const Vector2i &p_position, const TileSet::CellNeighbor &p_bit, int p_terrain); // For peering bits
- TerrainConstraint(){};
+ TerrainConstraint() {}
};
#ifdef DEBUG_ENABLED
diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp
index 591528b915..98bee2115c 100644
--- a/scene/3d/audio_stream_player_3d.cpp
+++ b/scene/3d/audio_stream_player_3d.cpp
@@ -401,10 +401,19 @@ Vector<AudioFrame> AudioStreamPlayer3D::_update_panning() {
if (area && area->is_using_reverb_bus() && area->get_reverb_uniformity() > 0) {
total_max = MAX(total_max, listener_area_pos.length());
}
- if (total_max > max_distance) {
+ if (dist > total_max || total_max > max_distance) {
+ if (!was_further_than_max_distance_last_frame) {
+ HashMap<StringName, Vector<AudioFrame>> bus_volumes;
+ for (Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) {
+ // So the player gets muted and mostly stops mixing when out of range.
+ AudioServer::get_singleton()->set_playback_bus_volumes_linear(playback, bus_volumes);
+ }
+ was_further_than_max_distance_last_frame = true; // Cache so we don't set the volume over and over.
+ }
continue; //can't hear this sound in this listener
}
}
+ was_further_than_max_distance_last_frame = false;
float multiplier = Math::db_to_linear(_get_attenuation_db(dist));
if (max_distance > 0) {
diff --git a/scene/3d/audio_stream_player_3d.h b/scene/3d/audio_stream_player_3d.h
index 72356faad7..91104a06c7 100644
--- a/scene/3d/audio_stream_player_3d.h
+++ b/scene/3d/audio_stream_player_3d.h
@@ -105,6 +105,7 @@ private:
float linear_attenuation = 0;
float max_distance = 0.0;
+ bool was_further_than_max_distance_last_frame = false;
Ref<VelocityTracker3D> velocity_tracker;
diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp
index cdc85d2b2d..a96417738f 100644
--- a/scene/animation/animation_blend_tree.cpp
+++ b/scene/animation/animation_blend_tree.cpp
@@ -1139,7 +1139,11 @@ void AnimationNodeTransition::remove_input(int p_index) {
bool AnimationNodeTransition::set_input_name(int p_input, const String &p_name) {
pending_update = true;
- return AnimationNode::set_input_name(p_input, p_name);
+ if (!AnimationNode::set_input_name(p_input, p_name)) {
+ return false;
+ }
+ emit_signal(SNAME("tree_changed")); // For updating enum options.
+ return true;
}
void AnimationNodeTransition::set_input_as_auto_advance(int p_input, bool p_enable) {
diff --git a/scene/gui/color_mode.h b/scene/gui/color_mode.h
index 84e9d4542d..94193ccf74 100644
--- a/scene/gui/color_mode.h
+++ b/scene/gui/color_mode.h
@@ -50,14 +50,14 @@ public:
virtual Color get_color() const = 0;
- virtual void _value_changed(){};
+ virtual void _value_changed() {}
virtual void slider_draw(int p_which) = 0;
virtual bool apply_theme() const { return false; }
virtual ColorPicker::PickerShapeType get_shape_override() const { return ColorPicker::SHAPE_MAX; }
ColorMode(ColorPicker *p_color_picker);
- virtual ~ColorMode(){};
+ virtual ~ColorMode() {}
};
class ColorModeHSV : public ColorMode {
@@ -81,7 +81,7 @@ public:
virtual void slider_draw(int p_which) override;
ColorModeHSV(ColorPicker *p_color_picker) :
- ColorMode(p_color_picker){};
+ ColorMode(p_color_picker) {}
};
class ColorModeRGB : public ColorMode {
@@ -100,7 +100,7 @@ public:
virtual void slider_draw(int p_which) override;
ColorModeRGB(ColorPicker *p_color_picker) :
- ColorMode(p_color_picker){};
+ ColorMode(p_color_picker) {}
};
class ColorModeRAW : public ColorMode {
@@ -122,7 +122,7 @@ public:
virtual bool apply_theme() const override;
ColorModeRAW(ColorPicker *p_color_picker) :
- ColorMode(p_color_picker){};
+ ColorMode(p_color_picker) {}
};
class ColorModeOKHSL : public ColorMode {
@@ -147,9 +147,9 @@ public:
virtual ColorPicker::PickerShapeType get_shape_override() const override { return ColorPicker::SHAPE_OKHSL_CIRCLE; }
ColorModeOKHSL(ColorPicker *p_color_picker) :
- ColorMode(p_color_picker){};
+ ColorMode(p_color_picker) {}
- ~ColorModeOKHSL(){};
+ ~ColorModeOKHSL() {}
};
#endif // COLOR_MODE_H
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 756cb77c60..43782409a8 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -921,6 +921,7 @@ Variant LineEdit::get_drag_data(const Point2 &p_point) {
String t = get_selected_text();
Label *l = memnew(Label);
l->set_text(t);
+ l->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); // Don't translate user input.
set_drag_preview(l);
return t;
}
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index 0c3c90d070..e302927692 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -5431,6 +5431,7 @@ Variant RichTextLabel::get_drag_data(const Point2 &p_point) {
String t = get_selected_text();
Label *l = memnew(Label);
l->set_text(t);
+ l->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); // Text is already translated.
set_drag_preview(l);
return t;
}
diff --git a/scene/gui/tab_bar.cpp b/scene/gui/tab_bar.cpp
index 3e0d6adf42..90bb0799b1 100644
--- a/scene/gui/tab_bar.cpp
+++ b/scene/gui/tab_bar.cpp
@@ -1250,6 +1250,7 @@ Variant TabBar::_handle_get_drag_data(const String &p_type, const Point2 &p_poin
}
Label *label = memnew(Label(get_tab_title(tab_over)));
+ label->set_auto_translate_mode(get_auto_translate_mode()); // Reflect how the title is displayed.
drag_preview->add_child(label);
set_drag_preview(drag_preview);
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index 6e533aa5ab..eb9616c939 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -267,10 +267,14 @@ void TabContainer::_repaint() {
Vector<Control *> controls = _get_tab_controls();
int current = get_current_tab();
+ // Move the TabBar to the top or bottom.
+ // Don't change the left and right offsets since the TabBar will resize and may change tab offset.
if (tabs_position == POSITION_BOTTOM) {
- tab_bar->set_anchors_and_offsets_preset(PRESET_BOTTOM_WIDE);
+ tab_bar->set_anchor_and_offset(SIDE_BOTTOM, 1.0, 0.0);
+ tab_bar->set_anchor_and_offset(SIDE_TOP, 1.0, -_get_tab_height());
} else {
- tab_bar->set_anchors_and_offsets_preset(PRESET_TOP_WIDE);
+ tab_bar->set_anchor_and_offset(SIDE_BOTTOM, 0.0, _get_tab_height());
+ tab_bar->set_anchor_and_offset(SIDE_TOP, 0.0, 0.0);
}
updating_visibility = true;
@@ -299,7 +303,6 @@ void TabContainer::_repaint() {
}
updating_visibility = false;
- _update_margins();
update_minimum_size();
}
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index bf9c479c69..888e680219 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -3034,6 +3034,7 @@ Variant TextEdit::get_drag_data(const Point2 &p_point) {
if (has_selection() && selection_drag_attempt) {
String t = get_selected_text();
Label *l = memnew(Label);
+ l->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); // Don't translate user input.
l->set_text(t);
set_drag_preview(l);
return t;
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 858fc2246b..eb3448e1a2 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -111,6 +111,7 @@ void Node::_notification(int p_notification) {
data.auto_translate_mode = AUTO_TRANSLATE_MODE_ALWAYS;
}
data.is_auto_translate_dirty = true;
+ data.is_translation_domain_dirty = true;
#ifdef TOOLS_ENABLED
// Don't translate UI elements when they're being edited.
@@ -1320,6 +1321,51 @@ bool Node::can_auto_translate() const {
return data.is_auto_translating;
}
+StringName Node::get_translation_domain() const {
+ ERR_READ_THREAD_GUARD_V(StringName());
+
+ if (data.is_translation_domain_inherited && data.is_translation_domain_dirty) {
+ const_cast<Node *>(this)->_translation_domain = data.parent ? data.parent->get_translation_domain() : StringName();
+ data.is_translation_domain_dirty = false;
+ }
+ return _translation_domain;
+}
+
+void Node::set_translation_domain(const StringName &p_domain) {
+ ERR_THREAD_GUARD
+
+ if (!data.is_translation_domain_inherited && _translation_domain == p_domain) {
+ return;
+ }
+
+ _translation_domain = p_domain;
+ data.is_translation_domain_inherited = false;
+ data.is_translation_domain_dirty = false;
+ _propagate_translation_domain_dirty();
+}
+
+void Node::set_translation_domain_inherited() {
+ ERR_THREAD_GUARD
+
+ if (data.is_translation_domain_inherited) {
+ return;
+ }
+ data.is_translation_domain_inherited = true;
+ data.is_translation_domain_dirty = true;
+ _propagate_translation_domain_dirty();
+}
+
+void Node::_propagate_translation_domain_dirty() {
+ for (KeyValue<StringName, Node *> &K : data.children) {
+ Node *child = K.value;
+ if (child->data.is_translation_domain_inherited) {
+ child->data.is_translation_domain_dirty = true;
+ child->_propagate_translation_domain_dirty();
+ }
+ }
+ notification(NOTIFICATION_TRANSLATION_CHANGED);
+}
+
StringName Node::get_name() const {
return data.name;
}
@@ -3610,6 +3656,7 @@ void Node::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_auto_translate_mode", "mode"), &Node::set_auto_translate_mode);
ClassDB::bind_method(D_METHOD("get_auto_translate_mode"), &Node::get_auto_translate_mode);
+ ClassDB::bind_method(D_METHOD("set_translation_domain_inherited"), &Node::set_translation_domain_inherited);
ClassDB::bind_method(D_METHOD("get_window"), &Node::get_window);
ClassDB::bind_method(D_METHOD("get_last_exclusive_window"), &Node::get_last_exclusive_window);
diff --git a/scene/main/node.h b/scene/main/node.h
index dc65513fca..4560ed085c 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -255,6 +255,9 @@ private:
mutable bool is_auto_translating = true;
mutable bool is_auto_translate_dirty = true;
+ mutable bool is_translation_domain_inherited = true;
+ mutable bool is_translation_domain_dirty = true;
+
mutable NodePath *path_cache = nullptr;
} data;
@@ -281,6 +284,7 @@ private:
void _propagate_physics_interpolation_reset_requested(bool p_requested);
void _propagate_process_owner(Node *p_owner, int p_pause_notification, int p_enabled_notification);
void _propagate_groups_dirty();
+ void _propagate_translation_domain_dirty();
Array _get_node_and_resource(const NodePath &p_path);
void _duplicate_properties(const Node *p_root, const Node *p_original, Node *p_copy, int p_flags) const;
@@ -735,6 +739,10 @@ public:
AutoTranslateMode get_auto_translate_mode() const;
bool can_auto_translate() const;
+ virtual StringName get_translation_domain() const override;
+ virtual void set_translation_domain(const StringName &p_domain) override;
+ void set_translation_domain_inherited();
+
_FORCE_INLINE_ String atr(const String p_message, const StringName p_context = "") const { return can_auto_translate() ? tr(p_message, p_context) : p_message; }
_FORCE_INLINE_ String atr_n(const String p_message, const StringName &p_message_plural, int p_n, const StringName p_context = "") const { return can_auto_translate() ? tr_n(p_message, p_message_plural, p_n, p_context) : p_message; }
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index acf4f67673..ba69f8cc45 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -4671,6 +4671,7 @@ void Viewport::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_as_audio_listener_2d", "enable"), &Viewport::set_as_audio_listener_2d);
ClassDB::bind_method(D_METHOD("is_audio_listener_2d"), &Viewport::is_audio_listener_2d);
+ ClassDB::bind_method(D_METHOD("get_audio_listener_2d"), &Viewport::get_audio_listener_2d);
ClassDB::bind_method(D_METHOD("get_camera_2d"), &Viewport::get_camera_2d);
#ifndef _3D_DISABLED
@@ -4681,6 +4682,7 @@ void Viewport::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_use_own_world_3d", "enable"), &Viewport::set_use_own_world_3d);
ClassDB::bind_method(D_METHOD("is_using_own_world_3d"), &Viewport::is_using_own_world_3d);
+ ClassDB::bind_method(D_METHOD("get_audio_listener_3d"), &Viewport::get_audio_listener_3d);
ClassDB::bind_method(D_METHOD("get_camera_3d"), &Viewport::get_camera_3d);
ClassDB::bind_method(D_METHOD("set_as_audio_listener_3d", "enable"), &Viewport::set_as_audio_listener_3d);
ClassDB::bind_method(D_METHOD("is_audio_listener_3d"), &Viewport::is_audio_listener_3d);
diff --git a/scene/resources/2d/tile_set.h b/scene/resources/2d/tile_set.h
index 931495d020..15e1a16359 100644
--- a/scene/resources/2d/tile_set.h
+++ b/scene/resources/2d/tile_set.h
@@ -571,25 +571,25 @@ public:
// Not exposed.
virtual void set_tile_set(const TileSet *p_tile_set);
TileSet *get_tile_set() const;
- virtual void notify_tile_data_properties_should_change(){};
- virtual void add_occlusion_layer(int p_index){};
- virtual void move_occlusion_layer(int p_from_index, int p_to_pos){};
- virtual void remove_occlusion_layer(int p_index){};
- virtual void add_physics_layer(int p_index){};
- virtual void move_physics_layer(int p_from_index, int p_to_pos){};
- virtual void remove_physics_layer(int p_index){};
- virtual void add_terrain_set(int p_index){};
- virtual void move_terrain_set(int p_from_index, int p_to_pos){};
- virtual void remove_terrain_set(int p_index){};
- virtual void add_terrain(int p_terrain_set, int p_index){};
- virtual void move_terrain(int p_terrain_set, int p_from_index, int p_to_pos){};
- virtual void remove_terrain(int p_terrain_set, int p_index){};
- virtual void add_navigation_layer(int p_index){};
- virtual void move_navigation_layer(int p_from_index, int p_to_pos){};
- virtual void remove_navigation_layer(int p_index){};
- virtual void add_custom_data_layer(int p_index){};
- virtual void move_custom_data_layer(int p_from_index, int p_to_pos){};
- virtual void remove_custom_data_layer(int p_index){};
+ virtual void notify_tile_data_properties_should_change() {}
+ virtual void add_occlusion_layer(int p_index) {}
+ virtual void move_occlusion_layer(int p_from_index, int p_to_pos) {}
+ virtual void remove_occlusion_layer(int p_index) {}
+ virtual void add_physics_layer(int p_index) {}
+ virtual void move_physics_layer(int p_from_index, int p_to_pos) {}
+ virtual void remove_physics_layer(int p_index) {}
+ virtual void add_terrain_set(int p_index) {}
+ virtual void move_terrain_set(int p_from_index, int p_to_pos) {}
+ virtual void remove_terrain_set(int p_index) {}
+ virtual void add_terrain(int p_terrain_set, int p_index) {}
+ virtual void move_terrain(int p_terrain_set, int p_from_index, int p_to_pos) {}
+ virtual void remove_terrain(int p_terrain_set, int p_index) {}
+ virtual void add_navigation_layer(int p_index) {}
+ virtual void move_navigation_layer(int p_from_index, int p_to_pos) {}
+ virtual void remove_navigation_layer(int p_index) {}
+ virtual void add_custom_data_layer(int p_index) {}
+ virtual void move_custom_data_layer(int p_from_index, int p_to_pos) {}
+ virtual void remove_custom_data_layer(int p_index) {}
virtual void reset_state() override;
// Tiles.
diff --git a/scene/resources/3d/primitive_meshes.h b/scene/resources/3d/primitive_meshes.h
index fc2489923a..85f46a482a 100644
--- a/scene/resources/3d/primitive_meshes.h
+++ b/scene/resources/3d/primitive_meshes.h
@@ -77,7 +77,7 @@ protected:
Vector2 get_uv2_scale(Vector2 p_margin_scale = Vector2(1.0, 1.0)) const;
float get_lightmap_texel_size() const;
- virtual void _update_lightmap_size(){};
+ virtual void _update_lightmap_size() {}
void _on_settings_changed();
@@ -541,7 +541,7 @@ private:
Vector2 point;
bool sharp = false;
- ContourPoint(){};
+ ContourPoint() {}
ContourPoint(const Vector2 &p_pt, bool p_sharp) {
point = p_pt;
sharp = p_sharp;
@@ -551,7 +551,7 @@ private:
struct ContourInfo {
real_t length = 0.0;
bool ccw = true;
- ContourInfo(){};
+ ContourInfo() {}
ContourInfo(real_t p_len, bool p_ccw) {
length = p_len;
ccw = p_ccw;
diff --git a/scene/resources/camera_attributes.h b/scene/resources/camera_attributes.h
index 0f819134e2..de57b0ce8f 100644
--- a/scene/resources/camera_attributes.h
+++ b/scene/resources/camera_attributes.h
@@ -53,7 +53,7 @@ protected:
float auto_exposure_max = 64.0;
float auto_exposure_speed = 0.5;
float auto_exposure_scale = 0.4;
- virtual void _update_auto_exposure(){};
+ virtual void _update_auto_exposure() {}
public:
virtual RID get_rid() const override;