summaryrefslogtreecommitdiffstats
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/3d/importer_mesh_instance_3d.cpp92
-rw-r--r--scene/3d/importer_mesh_instance_3d.h29
-rw-r--r--scene/animation/animation_blend_space_1d.cpp4
-rw-r--r--scene/animation/animation_blend_space_2d.cpp4
-rw-r--r--scene/gui/tab_container.cpp5
-rw-r--r--scene/gui/tab_container.h2
-rw-r--r--scene/resources/gradient.h4
-rw-r--r--scene/theme/theme_owner.cpp20
8 files changed, 153 insertions, 7 deletions
diff --git a/scene/3d/importer_mesh_instance_3d.cpp b/scene/3d/importer_mesh_instance_3d.cpp
index d7cbe6d87c..2216b3818d 100644
--- a/scene/3d/importer_mesh_instance_3d.cpp
+++ b/scene/3d/importer_mesh_instance_3d.cpp
@@ -69,6 +69,67 @@ NodePath ImporterMeshInstance3D::get_skeleton_path() const {
return skeleton_path;
}
+uint32_t ImporterMeshInstance3D::get_layer_mask() const {
+ return layer_mask;
+}
+
+void ImporterMeshInstance3D::set_layer_mask(const uint32_t p_layer_mask) {
+ layer_mask = p_layer_mask;
+}
+
+void ImporterMeshInstance3D::set_cast_shadows_setting(GeometryInstance3D::ShadowCastingSetting p_shadow_casting_setting) {
+ shadow_casting_setting = p_shadow_casting_setting;
+}
+
+GeometryInstance3D::ShadowCastingSetting ImporterMeshInstance3D::get_cast_shadows_setting() const {
+ return shadow_casting_setting;
+}
+
+void ImporterMeshInstance3D::set_visibility_range_begin(float p_dist) {
+ visibility_range_begin = p_dist;
+ update_configuration_warnings();
+}
+
+float ImporterMeshInstance3D::get_visibility_range_begin() const {
+ return visibility_range_begin;
+}
+
+void ImporterMeshInstance3D::set_visibility_range_end(float p_dist) {
+ visibility_range_end = p_dist;
+ update_configuration_warnings();
+}
+
+float ImporterMeshInstance3D::get_visibility_range_end() const {
+ return visibility_range_end;
+}
+
+void ImporterMeshInstance3D::set_visibility_range_begin_margin(float p_dist) {
+ visibility_range_begin_margin = p_dist;
+ update_configuration_warnings();
+}
+
+float ImporterMeshInstance3D::get_visibility_range_begin_margin() const {
+ return visibility_range_begin_margin;
+}
+
+void ImporterMeshInstance3D::set_visibility_range_end_margin(float p_dist) {
+ visibility_range_end_margin = p_dist;
+ update_configuration_warnings();
+}
+
+float ImporterMeshInstance3D::get_visibility_range_end_margin() const {
+ return visibility_range_end_margin;
+}
+
+void ImporterMeshInstance3D::set_visibility_range_fade_mode(GeometryInstance3D::VisibilityRangeFadeMode p_mode) {
+ visibility_range_fade_mode = p_mode;
+ update_configuration_warnings();
+}
+
+GeometryInstance3D::VisibilityRangeFadeMode ImporterMeshInstance3D::get_visibility_range_fade_mode() const {
+ return visibility_range_fade_mode;
+}
+
void ImporterMeshInstance3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_mesh", "mesh"), &ImporterMeshInstance3D::set_mesh);
ClassDB::bind_method(D_METHOD("get_mesh"), &ImporterMeshInstance3D::get_mesh);
@@ -79,7 +140,38 @@ void ImporterMeshInstance3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_skeleton_path", "skeleton_path"), &ImporterMeshInstance3D::set_skeleton_path);
ClassDB::bind_method(D_METHOD("get_skeleton_path"), &ImporterMeshInstance3D::get_skeleton_path);
+ ClassDB::bind_method(D_METHOD("set_layer_mask", "layer_mask"), &ImporterMeshInstance3D::set_layer_mask);
+ ClassDB::bind_method(D_METHOD("get_layer_mask"), &ImporterMeshInstance3D::get_layer_mask);
+
+ ClassDB::bind_method(D_METHOD("set_cast_shadows_setting", "shadow_casting_setting"), &ImporterMeshInstance3D::set_cast_shadows_setting);
+ ClassDB::bind_method(D_METHOD("get_cast_shadows_setting"), &ImporterMeshInstance3D::get_cast_shadows_setting);
+
+ ClassDB::bind_method(D_METHOD("set_visibility_range_end_margin", "distance"), &ImporterMeshInstance3D::set_visibility_range_end_margin);
+ ClassDB::bind_method(D_METHOD("get_visibility_range_end_margin"), &ImporterMeshInstance3D::get_visibility_range_end_margin);
+
+ ClassDB::bind_method(D_METHOD("set_visibility_range_end", "distance"), &ImporterMeshInstance3D::set_visibility_range_end);
+ ClassDB::bind_method(D_METHOD("get_visibility_range_end"), &ImporterMeshInstance3D::get_visibility_range_end);
+
+ ClassDB::bind_method(D_METHOD("set_visibility_range_begin_margin", "distance"), &ImporterMeshInstance3D::set_visibility_range_begin_margin);
+ ClassDB::bind_method(D_METHOD("get_visibility_range_begin_margin"), &ImporterMeshInstance3D::get_visibility_range_begin_margin);
+
+ ClassDB::bind_method(D_METHOD("set_visibility_range_begin", "distance"), &ImporterMeshInstance3D::set_visibility_range_begin);
+ ClassDB::bind_method(D_METHOD("get_visibility_range_begin"), &ImporterMeshInstance3D::get_visibility_range_begin);
+
+ ClassDB::bind_method(D_METHOD("set_visibility_range_fade_mode", "mode"), &ImporterMeshInstance3D::set_visibility_range_fade_mode);
+ ClassDB::bind_method(D_METHOD("get_visibility_range_fade_mode"), &ImporterMeshInstance3D::get_visibility_range_fade_mode);
+
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "ImporterMesh"), "set_mesh", "get_mesh");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "skin", PROPERTY_HINT_RESOURCE_TYPE, "Skin"), "set_skin", "get_skin");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton_path", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton"), "set_skeleton_path", "get_skeleton_path");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "layer_mask", PROPERTY_HINT_LAYERS_3D_RENDER), "set_layer_mask", "get_layer_mask");
+
+ 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_GROUP("Visibility Range", "visibility_range_");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_begin", "get_visibility_range_begin");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_begin_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_begin_margin", "get_visibility_range_begin_margin");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_end", "get_visibility_range_end");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,or_greater,suffix:m"), "set_visibility_range_end_margin", "get_visibility_range_end_margin");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "visibility_range_fade_mode", PROPERTY_HINT_ENUM, "Disabled,Self,Dependencies"), "set_visibility_range_fade_mode", "get_visibility_range_fade_mode");
}
diff --git a/scene/3d/importer_mesh_instance_3d.h b/scene/3d/importer_mesh_instance_3d.h
index ea2a6cadbd..d48721383f 100644
--- a/scene/3d/importer_mesh_instance_3d.h
+++ b/scene/3d/importer_mesh_instance_3d.h
@@ -32,6 +32,7 @@
#define IMPORTER_MESH_INSTANCE_3D_H
#include "scene/3d/node_3d.h"
+#include "scene/3d/visual_instance_3d.h"
#include "scene/resources/immediate_mesh.h"
#include "scene/resources/skin.h"
@@ -44,6 +45,13 @@ class ImporterMeshInstance3D : public Node3D {
Ref<Skin> skin;
NodePath skeleton_path;
Vector<Ref<Material>> surface_materials;
+ uint32_t layer_mask = 1;
+ GeometryInstance3D::ShadowCastingSetting shadow_casting_setting = GeometryInstance3D::SHADOW_CASTING_SETTING_ON;
+ float visibility_range_begin = 0.0;
+ float visibility_range_end = 0.0;
+ float visibility_range_begin_margin = 0.0;
+ float visibility_range_end_margin = 0.0;
+ GeometryInstance3D::VisibilityRangeFadeMode visibility_range_fade_mode = GeometryInstance3D::VISIBILITY_RANGE_FADE_DISABLED;
protected:
static void _bind_methods();
@@ -60,6 +68,27 @@ public:
void set_skeleton_path(const NodePath &p_path);
NodePath get_skeleton_path() const;
+
+ void set_layer_mask(const uint32_t p_layer_mask);
+ uint32_t get_layer_mask() const;
+
+ void set_cast_shadows_setting(GeometryInstance3D::ShadowCastingSetting p_shadow_casting_setting);
+ GeometryInstance3D::ShadowCastingSetting get_cast_shadows_setting() const;
+
+ void set_visibility_range_begin(float p_dist);
+ float get_visibility_range_begin() const;
+
+ void set_visibility_range_end(float p_dist);
+ float get_visibility_range_end() const;
+
+ void set_visibility_range_begin_margin(float p_dist);
+ float get_visibility_range_begin_margin() const;
+
+ void set_visibility_range_end_margin(float p_dist);
+ float get_visibility_range_end_margin() const;
+
+ void set_visibility_range_fade_mode(GeometryInstance3D::VisibilityRangeFadeMode p_mode);
+ GeometryInstance3D::VisibilityRangeFadeMode get_visibility_range_fade_mode() const;
};
#endif // IMPORTER_MESH_INSTANCE_3D_H
diff --git a/scene/animation/animation_blend_space_1d.cpp b/scene/animation/animation_blend_space_1d.cpp
index f53be5b8f9..1e0584e1db 100644
--- a/scene/animation/animation_blend_space_1d.cpp
+++ b/scene/animation/animation_blend_space_1d.cpp
@@ -177,12 +177,12 @@ void AnimationNodeBlendSpace1D::set_blend_point_node(int p_point, const Ref<Anim
}
float AnimationNodeBlendSpace1D::get_blend_point_position(int p_point) const {
- ERR_FAIL_INDEX_V(p_point, blend_points_used, 0);
+ ERR_FAIL_INDEX_V(p_point, MAX_BLEND_POINTS, 0);
return blend_points[p_point].position;
}
Ref<AnimationRootNode> AnimationNodeBlendSpace1D::get_blend_point_node(int p_point) const {
- ERR_FAIL_INDEX_V(p_point, blend_points_used, Ref<AnimationRootNode>());
+ ERR_FAIL_INDEX_V(p_point, MAX_BLEND_POINTS, Ref<AnimationRootNode>());
return blend_points[p_point].node;
}
diff --git a/scene/animation/animation_blend_space_2d.cpp b/scene/animation/animation_blend_space_2d.cpp
index 5715516a7f..ff0be091ac 100644
--- a/scene/animation/animation_blend_space_2d.cpp
+++ b/scene/animation/animation_blend_space_2d.cpp
@@ -114,12 +114,12 @@ void AnimationNodeBlendSpace2D::set_blend_point_node(int p_point, const Ref<Anim
}
Vector2 AnimationNodeBlendSpace2D::get_blend_point_position(int p_point) const {
- ERR_FAIL_INDEX_V(p_point, blend_points_used, Vector2());
+ ERR_FAIL_INDEX_V(p_point, MAX_BLEND_POINTS, Vector2());
return blend_points[p_point].position;
}
Ref<AnimationRootNode> AnimationNodeBlendSpace2D::get_blend_point_node(int p_point) const {
- ERR_FAIL_INDEX_V(p_point, blend_points_used, Ref<AnimationRootNode>());
+ ERR_FAIL_INDEX_V(p_point, MAX_BLEND_POINTS, Ref<AnimationRootNode>());
return blend_points[p_point].node;
}
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index 14bc87ad40..bad85560d1 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -585,6 +585,10 @@ void TabContainer::remove_child_notify(Node *p_child) {
}
}
+TabBar *TabContainer::get_tab_bar() const {
+ return tab_bar;
+}
+
int TabContainer::get_tab_count() const {
return tab_bar->get_tab_count();
}
@@ -912,6 +916,7 @@ void TabContainer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_current_tab"), &TabContainer::get_current_tab);
ClassDB::bind_method(D_METHOD("get_previous_tab"), &TabContainer::get_previous_tab);
ClassDB::bind_method(D_METHOD("get_current_tab_control"), &TabContainer::get_current_tab_control);
+ ClassDB::bind_method(D_METHOD("get_tab_bar"), &TabContainer::get_tab_bar);
ClassDB::bind_method(D_METHOD("get_tab_control", "tab_idx"), &TabContainer::get_tab_control);
ClassDB::bind_method(D_METHOD("set_tab_alignment", "alignment"), &TabContainer::set_tab_alignment);
ClassDB::bind_method(D_METHOD("get_tab_alignment"), &TabContainer::get_tab_alignment);
diff --git a/scene/gui/tab_container.h b/scene/gui/tab_container.h
index 2bcc640d05..9919565f1e 100644
--- a/scene/gui/tab_container.h
+++ b/scene/gui/tab_container.h
@@ -111,6 +111,8 @@ protected:
static void _bind_methods();
public:
+ TabBar *get_tab_bar() const;
+
int get_tab_idx_at_point(const Point2 &p_point) const;
int get_tab_idx_from_control(Control *p_child) const;
diff --git a/scene/resources/gradient.h b/scene/resources/gradient.h
index b88399117d..0c996e2de9 100644
--- a/scene/resources/gradient.h
+++ b/scene/resources/gradient.h
@@ -55,8 +55,8 @@ public:
struct Point {
float offset = 0.0;
Color color;
- bool operator<(const Point &p_ponit) const {
- return offset < p_ponit.offset;
+ bool operator<(const Point &p_point) const {
+ return offset < p_point.offset;
}
};
diff --git a/scene/theme/theme_owner.cpp b/scene/theme/theme_owner.cpp
index 92cffeb228..2852a64e39 100644
--- a/scene/theme/theme_owner.cpp
+++ b/scene/theme/theme_owner.cpp
@@ -212,8 +212,26 @@ void ThemeOwner::get_theme_type_dependencies(const Node *p_for_node, const Strin
type_variation = for_w->get_theme_type_variation();
}
- // If we are looking for dependencies of the current class (or a variation of it), check themes from the context.
+ // If we are looking for dependencies of the current class (or a variation of it), check relevant themes.
if (p_theme_type == StringName() || p_theme_type == type_name || p_theme_type == type_variation) {
+ // We need one theme that can give us a valid dependency chain. It must be complete
+ // (i.e. variations can depend on other variations, but only within the same theme,
+ // and eventually the chain must lead to native types).
+
+ // First, look through themes owned by nodes in the tree.
+ Node *owner_node = get_owner_node();
+
+ while (owner_node) {
+ Ref<Theme> owner_theme = _get_owner_node_theme(owner_node);
+ if (owner_theme.is_valid() && owner_theme->get_type_variation_base(type_variation) != StringName()) {
+ owner_theme->get_type_dependencies(type_name, type_variation, r_list);
+ return;
+ }
+
+ owner_node = _get_next_owner_node(owner_node);
+ }
+
+ // Second, check global contexts.
ThemeContext *global_context = _get_active_owner_context();
for (const Ref<Theme> &theme : global_context->get_themes()) {
if (theme.is_valid() && theme->get_type_variation_base(type_variation) != StringName()) {