summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/gridmap/editor/grid_map_editor_plugin.cpp6
-rw-r--r--modules/mobile_vr/mobile_vr_interface.cpp9
-rw-r--r--modules/mobile_vr/mobile_vr_interface.h1
-rw-r--r--modules/mono/csharp_script.cpp132
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs6
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Godot.SourceGenerators.props1
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs2
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs2
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPathAttributeGenerator.cs2
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs2
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs2
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs2
-rw-r--r--modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs2
-rw-r--r--modules/mono/editor/bindings_generator.cpp26
-rw-r--r--modules/mono/editor/bindings_generator.h5
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs6
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs10
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs11
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs12
-rw-r--r--modules/multiplayer/scene_replication_config.cpp16
-rw-r--r--modules/navigation/nav_map.cpp1
-rw-r--r--modules/openxr/openxr_api.cpp7
-rw-r--r--modules/openxr/openxr_api.h6
-rw-r--r--modules/openxr/openxr_interface.cpp11
-rw-r--r--modules/openxr/openxr_interface.h1
-rw-r--r--modules/openxr/scene/openxr_hand.cpp2
-rw-r--r--modules/webxr/webxr_interface_js.cpp10
-rw-r--r--modules/webxr/webxr_interface_js.h1
28 files changed, 187 insertions, 107 deletions
diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp
index 541a95ab6f..bb5eb8e643 100644
--- a/modules/gridmap/editor/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp
@@ -608,13 +608,13 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_valid()) {
- if (mb->get_button_index() == MouseButton::WHEEL_UP && (mb->is_command_or_control_pressed() || mb->is_shift_pressed())) {
+ if (mb->get_button_index() == MouseButton::WHEEL_UP && (mb->is_command_or_control_pressed())) {
if (mb->is_pressed()) {
floor->set_value(floor->get_value() + mb->get_factor());
}
return EditorPlugin::AFTER_GUI_INPUT_STOP; // Eaten.
- } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && (mb->is_command_or_control_pressed() || mb->is_shift_pressed())) {
+ } else if (mb->get_button_index() == MouseButton::WHEEL_DOWN && (mb->is_command_or_control_pressed())) {
if (mb->is_pressed()) {
floor->set_value(floor->get_value() - mb->get_factor());
}
@@ -753,7 +753,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
Ref<InputEventPanGesture> pan_gesture = p_event;
if (pan_gesture.is_valid()) {
- if (pan_gesture->is_alt_pressed() && (pan_gesture->is_command_or_control_pressed() || pan_gesture->is_shift_pressed())) {
+ if (pan_gesture->is_alt_pressed() && pan_gesture->is_command_or_control_pressed()) {
const real_t delta = pan_gesture->get_delta().y * 0.5;
accumulated_floor_delta += delta;
int step = 0;
diff --git a/modules/mobile_vr/mobile_vr_interface.cpp b/modules/mobile_vr/mobile_vr_interface.cpp
index 5fab53441c..94a3f0777e 100644
--- a/modules/mobile_vr/mobile_vr_interface.cpp
+++ b/modules/mobile_vr/mobile_vr_interface.cpp
@@ -372,6 +372,15 @@ void MobileVRInterface::uninitialize() {
};
};
+Dictionary MobileVRInterface::get_system_info() {
+ Dictionary dict;
+
+ dict[SNAME("XRRuntimeName")] = String("Godot mobile VR interface");
+ dict[SNAME("XRRuntimeVersion")] = String("");
+
+ return dict;
+}
+
bool MobileVRInterface::supports_play_area_mode(XRInterface::PlayAreaMode p_mode) {
// This interface has no positional tracking so fix this to 3DOF
return p_mode == XR_PLAY_AREA_3DOF;
diff --git a/modules/mobile_vr/mobile_vr_interface.h b/modules/mobile_vr/mobile_vr_interface.h
index 12075eda82..f680d8aa11 100644
--- a/modules/mobile_vr/mobile_vr_interface.h
+++ b/modules/mobile_vr/mobile_vr_interface.h
@@ -141,6 +141,7 @@ public:
virtual bool is_initialized() const override;
virtual bool initialize() override;
virtual void uninitialize() override;
+ virtual Dictionary get_system_info() override;
virtual bool supports_play_area_mode(XRInterface::PlayAreaMode p_mode) override;
virtual XRInterface::PlayAreaMode get_play_area_mode() const override;
diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp
index 1dbf6b3471..a77b1d83ad 100644
--- a/modules/mono/csharp_script.cpp
+++ b/modules/mono/csharp_script.cpp
@@ -334,8 +334,8 @@ bool CSharpLanguage::is_using_templates() {
}
Ref<Script> CSharpLanguage::make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const {
- Ref<CSharpScript> script;
- script.instantiate();
+ Ref<CSharpScript> scr;
+ scr.instantiate();
String class_name_no_spaces = p_class_name.replace(" ", "_");
String base_class_name = get_base_class_name(p_base_class_name, class_name_no_spaces);
@@ -344,8 +344,8 @@ Ref<Script> CSharpLanguage::make_template(const String &p_template, const String
.replace("_BASE_", base_class_name)
.replace("_CLASS_", class_name_no_spaces)
.replace("_TS_", _get_indentation());
- script->set_source_code(processed_template);
- return script;
+ scr->set_source_code(processed_template);
+ return scr;
}
Vector<ScriptLanguage::ScriptTemplate> CSharpLanguage::get_built_in_templates(StringName p_object) {
@@ -780,28 +780,28 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
// As scripts are going to be reloaded, must proceed without locking here
- for (Ref<CSharpScript> &script : scripts) {
+ for (Ref<CSharpScript> &scr : scripts) {
// If someone removes a script from a node, deletes the script, builds, adds a script to the
// same node, then builds again, the script might have no path and also no script_class. In
// that case, we can't (and don't need to) reload it.
- if (script->get_path().is_empty() && !script->valid) {
+ if (scr->get_path().is_empty() && !scr->valid) {
continue;
}
- to_reload.push_back(script);
+ to_reload.push_back(scr);
// Script::instances are deleted during managed object disposal, which happens on domain finalize.
// Only placeholders are kept. Therefore we need to keep a copy before that happens.
- for (Object *obj : script->instances) {
- script->pending_reload_instances.insert(obj->get_instance_id());
+ for (Object *obj : scr->instances) {
+ scr->pending_reload_instances.insert(obj->get_instance_id());
// Since this script instance wasn't a placeholder, add it to the list of placeholders
// that will have to be eventually replaced with a script instance in case it turns into one.
// This list is not cleared after the reload and the collected instances only leave
// the list if the script is instantiated or if it was a tool script but becomes a
// non-tool script in a rebuild.
- script->pending_replace_placeholders.insert(obj->get_instance_id());
+ scr->pending_replace_placeholders.insert(obj->get_instance_id());
RefCounted *rc = Object::cast_to<RefCounted>(obj);
if (rc) {
@@ -810,9 +810,9 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
}
#ifdef TOOLS_ENABLED
- for (PlaceHolderScriptInstance *script_instance : script->placeholders) {
- Object *obj = script_instance->get_owner();
- script->pending_reload_instances.insert(obj->get_instance_id());
+ for (PlaceHolderScriptInstance *instance : scr->placeholders) {
+ Object *obj = instance->get_owner();
+ scr->pending_reload_instances.insert(obj->get_instance_id());
RefCounted *rc = Object::cast_to<RefCounted>(obj);
if (rc) {
@@ -822,9 +822,9 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
#endif
// Save state and remove script from instances
- RBMap<ObjectID, CSharpScript::StateBackup> &owners_map = script->pending_reload_state;
+ RBMap<ObjectID, CSharpScript::StateBackup> &owners_map = scr->pending_reload_state;
- for (Object *obj : script->instances) {
+ for (Object *obj : scr->instances) {
ERR_CONTINUE(!obj->get_script_instance());
CSharpInstance *csi = static_cast<CSharpInstance *>(obj->get_script_instance());
@@ -849,14 +849,14 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
}
// After the state of all instances is saved, clear scripts and script instances
- for (Ref<CSharpScript> &script : scripts) {
- while (script->instances.begin()) {
- Object *obj = *script->instances.begin();
+ for (Ref<CSharpScript> &scr : scripts) {
+ while (scr->instances.begin()) {
+ Object *obj = *scr->instances.begin();
obj->set_script(Ref<RefCounted>()); // Remove script and existing script instances (placeholder are not removed before domain reload)
}
- script->was_tool_before_reload = script->tool;
- script->_clear();
+ scr->was_tool_before_reload = scr->tool;
+ scr->_clear();
}
// Do domain reload
@@ -901,44 +901,44 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
List<Ref<CSharpScript>> to_reload_state;
- for (Ref<CSharpScript> &script : to_reload) {
+ for (Ref<CSharpScript> &scr : to_reload) {
#ifdef TOOLS_ENABLED
- script->exports_invalidated = true;
+ scr->exports_invalidated = true;
#endif
- if (!script->get_path().is_empty()) {
- script->reload(p_soft_reload);
+ if (!scr->get_path().is_empty()) {
+ scr->reload(p_soft_reload);
- if (!script->valid) {
- script->pending_reload_instances.clear();
- script->pending_reload_state.clear();
+ if (!scr->valid) {
+ scr->pending_reload_instances.clear();
+ scr->pending_reload_state.clear();
continue;
}
} else {
- bool success = GDMonoCache::managed_callbacks.ScriptManagerBridge_TryReloadRegisteredScriptWithClass(script.ptr());
+ bool success = GDMonoCache::managed_callbacks.ScriptManagerBridge_TryReloadRegisteredScriptWithClass(scr.ptr());
if (!success) {
// Couldn't reload
- script->pending_reload_instances.clear();
- script->pending_reload_state.clear();
+ scr->pending_reload_instances.clear();
+ scr->pending_reload_state.clear();
continue;
}
}
- StringName native_name = script->get_instance_base_type();
+ StringName native_name = scr->get_instance_base_type();
{
- for (const ObjectID &obj_id : script->pending_reload_instances) {
+ for (const ObjectID &obj_id : scr->pending_reload_instances) {
Object *obj = ObjectDB::get_instance(obj_id);
if (!obj) {
- script->pending_reload_state.erase(obj_id);
+ scr->pending_reload_state.erase(obj_id);
continue;
}
if (!ClassDB::is_parent_class(obj->get_class_name(), native_name)) {
// No longer inherits the same compatible type, can't reload
- script->pending_reload_state.erase(obj_id);
+ scr->pending_reload_state.erase(obj_id);
continue;
}
@@ -946,11 +946,11 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
// Check if the script must be instantiated or kept as a placeholder
// when the script may not be a tool (see #65266)
- bool replace_placeholder = script->pending_replace_placeholders.has(obj->get_instance_id());
- if (!script->is_tool() && script->was_tool_before_reload) {
+ bool replace_placeholder = scr->pending_replace_placeholders.has(obj->get_instance_id());
+ if (!scr->is_tool() && scr->was_tool_before_reload) {
// The script was a tool before the rebuild so the removal was intentional.
replace_placeholder = false;
- script->pending_replace_placeholders.erase(obj->get_instance_id());
+ scr->pending_replace_placeholders.erase(obj->get_instance_id());
}
#ifdef TOOLS_ENABLED
@@ -959,20 +959,20 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
// Non-placeholder script instances are removed in godot_icall_Object_Disposed.
CRASH_COND(!si->is_placeholder());
- if (replace_placeholder || script->is_tool() || ScriptServer::is_scripting_enabled()) {
+ if (replace_placeholder || scr->is_tool() || ScriptServer::is_scripting_enabled()) {
// Replace placeholder with a script instance.
- CSharpScript::StateBackup &state_backup = script->pending_reload_state[obj_id];
+ CSharpScript::StateBackup &state_backup = scr->pending_reload_state[obj_id];
// Backup placeholder script instance state before replacing it with a script instance.
si->get_property_state(state_backup.properties);
- ScriptInstance *script_instance = script->instance_create(obj);
+ ScriptInstance *instance = scr->instance_create(obj);
- if (script_instance) {
- script->placeholders.erase(static_cast<PlaceHolderScriptInstance *>(si));
- script->pending_replace_placeholders.erase(obj->get_instance_id());
- obj->set_script_instance(script_instance);
+ if (instance) {
+ scr->placeholders.erase(static_cast<PlaceHolderScriptInstance *>(si));
+ scr->pending_replace_placeholders.erase(obj->get_instance_id());
+ obj->set_script_instance(instance);
}
}
@@ -983,18 +983,18 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
#endif
// Re-create the script instance.
- if (replace_placeholder || script->is_tool() || ScriptServer::is_scripting_enabled()) {
+ if (replace_placeholder || scr->is_tool() || ScriptServer::is_scripting_enabled()) {
// Create script instance or replace placeholder with a script instance.
- ScriptInstance *script_instance = script->instance_create(obj);
+ ScriptInstance *instance = scr->instance_create(obj);
- if (script_instance) {
- script->pending_replace_placeholders.erase(obj->get_instance_id());
- obj->set_script_instance(script_instance);
+ if (instance) {
+ scr->pending_replace_placeholders.erase(obj->get_instance_id());
+ obj->set_script_instance(instance);
continue;
}
}
// The script instance could not be instantiated or wasn't in the list of placeholders to replace.
- obj->set_script(script);
+ obj->set_script(scr);
#if DEBUG_ENABLED
// If we reached here, the instantiated script must be a placeholder.
CRASH_COND(!obj->get_script_instance()->is_placeholder());
@@ -1002,21 +1002,21 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
}
}
- to_reload_state.push_back(script);
+ to_reload_state.push_back(scr);
}
- for (Ref<CSharpScript> &script : to_reload_state) {
- for (const ObjectID &obj_id : script->pending_reload_instances) {
+ for (Ref<CSharpScript> &scr : to_reload_state) {
+ for (const ObjectID &obj_id : scr->pending_reload_instances) {
Object *obj = ObjectDB::get_instance(obj_id);
if (!obj) {
- script->pending_reload_state.erase(obj_id);
+ scr->pending_reload_state.erase(obj_id);
continue;
}
ERR_CONTINUE(!obj->get_script_instance());
- CSharpScript::StateBackup &state_backup = script->pending_reload_state[obj_id];
+ CSharpScript::StateBackup &state_backup = scr->pending_reload_state[obj_id];
CSharpInstance *csi = CAST_CSHARP_INSTANCE(obj->get_script_instance());
@@ -1033,8 +1033,8 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
}
}
- script->pending_reload_instances.clear();
- script->pending_reload_state.clear();
+ scr->pending_reload_instances.clear();
+ scr->pending_reload_state.clear();
}
// Deserialize managed callables
@@ -2144,8 +2144,8 @@ bool CSharpScript::_update_exports(PlaceHolderScriptInstance *p_instance_to_upda
_update_exports_values(values, propnames);
if (changed) {
- for (PlaceHolderScriptInstance *script_instance : placeholders) {
- script_instance->update(propnames, values);
+ for (PlaceHolderScriptInstance *instance : placeholders) {
+ instance->update(propnames, values);
}
} else {
p_instance_to_update->update(propnames, values);
@@ -2711,28 +2711,28 @@ Ref<Resource> ResourceFormatLoaderCSharpScript::load(const String &p_path, const
// TODO ignore anything inside bin/ and obj/ in tools builds?
- Ref<CSharpScript> script;
+ Ref<CSharpScript> scr;
if (GDMonoCache::godot_api_cache_updated) {
- GDMonoCache::managed_callbacks.ScriptManagerBridge_GetOrCreateScriptBridgeForPath(&p_path, &script);
+ GDMonoCache::managed_callbacks.ScriptManagerBridge_GetOrCreateScriptBridgeForPath(&p_path, &scr);
} else {
- script = Ref<CSharpScript>(memnew(CSharpScript));
+ scr = Ref<CSharpScript>(memnew(CSharpScript));
}
#if defined(DEBUG_ENABLED) || defined(TOOLS_ENABLED)
- Error err = script->load_source_code(p_path);
+ Error err = scr->load_source_code(p_path);
ERR_FAIL_COND_V_MSG(err != OK, Ref<Resource>(), "Cannot load C# script file '" + p_path + "'.");
#endif
- script->set_path(p_original_path);
+ scr->set_path(p_original_path);
- script->reload();
+ scr->reload();
if (r_error) {
*r_error = OK;
}
- return script;
+ return scr;
}
void ResourceFormatLoaderCSharpScript::get_recognized_extensions(List<String> *p_extensions) const {
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs
index f0c9043fd5..7f627f0dc4 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ExtensionMethods.cs
@@ -26,6 +26,12 @@ namespace Godot.SourceGenerators
toggle != null &&
toggle.Equals("true", StringComparison.OrdinalIgnoreCase);
+ public static bool IsGodotSourceGeneratorDisabled(this GeneratorExecutionContext context, string generatorName) =>
+ AreGodotSourceGeneratorsDisabled(context) ||
+ (context.TryGetGlobalAnalyzerProperty("GodotDisabledSourceGenerators", out string? disabledGenerators) &&
+ disabledGenerators != null &&
+ disabledGenerators.Split(';').Contains(generatorName));
+
public static bool InheritsFrom(this INamedTypeSymbol? symbol, string assemblyName, string typeFullName)
{
while (symbol != null)
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Godot.SourceGenerators.props b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Godot.SourceGenerators.props
index 2a8ae7f958..56c51159d0 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Godot.SourceGenerators.props
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/Godot.SourceGenerators.props
@@ -1,6 +1,7 @@
<Project>
<ItemGroup>
<!-- $(GodotProjectDir) is defined by Godot.NET.Sdk -->
+ <CompilerVisibleProperty Include="GodotDisabledSourceGenerators" />
<CompilerVisibleProperty Include="GodotProjectDir" />
<CompilerVisibleProperty Include="GodotProjectDirBase64" />
<CompilerVisibleProperty Include="GodotSourceGenerators" />
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs
index 47a4516948..467313dc28 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/GodotPluginsInitializerGenerator.cs
@@ -13,7 +13,7 @@ namespace Godot.SourceGenerators
public void Execute(GeneratorExecutionContext context)
{
- if (context.IsGodotToolsProject())
+ if (context.IsGodotToolsProject() || context.IsGodotSourceGeneratorDisabled("GodotPluginsInitializer"))
return;
string source =
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs
index f79909589e..8b75530380 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptMethodsGenerator.cs
@@ -16,7 +16,7 @@ namespace Godot.SourceGenerators
public void Execute(GeneratorExecutionContext context)
{
- if (context.AreGodotSourceGeneratorsDisabled())
+ if (context.IsGodotSourceGeneratorDisabled("ScriptMethods"))
return;
INamedTypeSymbol[] godotClasses = context
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPathAttributeGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPathAttributeGenerator.cs
index d14e3c3781..01aafe9c74 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPathAttributeGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPathAttributeGenerator.cs
@@ -14,7 +14,7 @@ namespace Godot.SourceGenerators
{
public void Execute(GeneratorExecutionContext context)
{
- if (context.AreGodotSourceGeneratorsDisabled())
+ if (context.IsGodotSourceGeneratorDisabled("ScriptPathAttribute"))
return;
if (context.IsGodotToolsProject())
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs
index d333c24451..ef8e6f8fff 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs
@@ -16,7 +16,7 @@ namespace Godot.SourceGenerators
public void Execute(GeneratorExecutionContext context)
{
- if (context.AreGodotSourceGeneratorsDisabled())
+ if (context.IsGodotSourceGeneratorDisabled("ScriptProperties"))
return;
INamedTypeSymbol[] godotClasses = context
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs
index 089ee3f196..ac908a6de3 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertyDefValGenerator.cs
@@ -17,7 +17,7 @@ namespace Godot.SourceGenerators
public void Execute(GeneratorExecutionContext context)
{
- if (context.AreGodotSourceGeneratorsDisabled())
+ if (context.IsGodotSourceGeneratorDisabled("ScriptPropertyDefVal"))
return;
INamedTypeSymbol[] godotClasses = context
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs
index d8c6f3a196..97771b721d 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSerializationGenerator.cs
@@ -16,7 +16,7 @@ namespace Godot.SourceGenerators
public void Execute(GeneratorExecutionContext context)
{
- if (context.AreGodotSourceGeneratorsDisabled())
+ if (context.IsGodotSourceGeneratorDisabled("ScriptSerialization"))
return;
INamedTypeSymbol[] godotClasses = context
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs
index d67cb5349d..f40322bd89 100644
--- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs
+++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptSignalsGenerator.cs
@@ -23,7 +23,7 @@ namespace Godot.SourceGenerators
public void Execute(GeneratorExecutionContext context)
{
- if (context.AreGodotSourceGeneratorsDisabled())
+ if (context.IsGodotSourceGeneratorDisabled("ScriptSignals"))
return;
INamedTypeSymbol[] godotClasses = context
diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp
index 83101c1443..6690a3badb 100644
--- a/modules/mono/editor/bindings_generator.cpp
+++ b/modules/mono/editor/bindings_generator.cpp
@@ -523,7 +523,10 @@ void BindingsGenerator::_append_xml_method(StringBuilder &p_xml_output, const Ty
p_xml_output.append(target_imethod->proxy_name);
p_xml_output.append("\"/>");
} else {
- ERR_PRINT("Cannot resolve method reference in documentation: '" + p_link_target + "'.");
+ if (!p_target_itype->is_intentionally_ignored(p_link_target)) {
+ ERR_PRINT("Cannot resolve method reference in documentation: '" + p_link_target + "'.");
+ }
+
_append_xml_undeclared(p_xml_output, p_link_target);
}
}
@@ -563,7 +566,10 @@ void BindingsGenerator::_append_xml_member(StringBuilder &p_xml_output, const Ty
p_xml_output.append(target_iprop->proxy_name);
p_xml_output.append("\"/>");
} else {
- ERR_PRINT("Cannot resolve member reference in documentation: '" + p_link_target + "'.");
+ if (!p_target_itype->is_intentionally_ignored(p_link_target)) {
+ ERR_PRINT("Cannot resolve member reference in documentation: '" + p_link_target + "'.");
+ }
+
_append_xml_undeclared(p_xml_output, p_link_target);
}
}
@@ -591,7 +597,10 @@ void BindingsGenerator::_append_xml_signal(StringBuilder &p_xml_output, const Ty
p_xml_output.append(target_isignal->proxy_name);
p_xml_output.append("\"/>");
} else {
- ERR_PRINT("Cannot resolve signal reference in documentation: '" + p_link_target + "'.");
+ if (!p_target_itype->is_intentionally_ignored(p_link_target)) {
+ ERR_PRINT("Cannot resolve signal reference in documentation: '" + p_link_target + "'.");
+ }
+
_append_xml_undeclared(p_xml_output, p_link_target);
}
}
@@ -613,7 +622,10 @@ void BindingsGenerator::_append_xml_enum(StringBuilder &p_xml_output, const Type
p_xml_output.append(target_enum_itype.proxy_name); // Includes nesting class if any
p_xml_output.append("\"/>");
} else {
- ERR_PRINT("Cannot resolve enum reference in documentation: '" + p_link_target + "'.");
+ if (!p_target_itype->is_intentionally_ignored(p_link_target)) {
+ ERR_PRINT("Cannot resolve enum reference in documentation: '" + p_link_target + "'.");
+ }
+
_append_xml_undeclared(p_xml_output, p_link_target);
}
}
@@ -673,7 +685,10 @@ void BindingsGenerator::_append_xml_constant(StringBuilder &p_xml_output, const
// Also search in @GlobalScope as a last resort if no class was specified
_append_xml_constant_in_global_scope(p_xml_output, p_target_cname, p_link_target);
} else {
- ERR_PRINT("Cannot resolve constant reference in documentation: '" + p_link_target + "'.");
+ if (!p_target_itype->is_intentionally_ignored(p_link_target)) {
+ ERR_PRINT("Cannot resolve constant reference in documentation: '" + p_link_target + "'.");
+ }
+
_append_xml_undeclared(p_xml_output, p_link_target);
}
}
@@ -2936,6 +2951,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
if (method_has_ptr_parameter(method_info)) {
// Pointers are not supported.
+ itype.ignored_members.insert(method_info.name);
continue;
}
diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h
index 5c266ed31f..eac281ddb4 100644
--- a/modules/mono/editor/bindings_generator.h
+++ b/modules/mono/editor/bindings_generator.h
@@ -408,6 +408,7 @@ class BindingsGenerator {
List<PropertyInterface> properties;
List<MethodInterface> methods;
List<SignalInterface> signals_;
+ HashSet<String> ignored_members;
bool has_virtual_methods = false;
@@ -471,6 +472,10 @@ class BindingsGenerator {
return nullptr;
}
+ bool is_intentionally_ignored(const String &p_name) const {
+ return ignored_members.has(p_name);
+ }
+
private:
static DocData::ClassDoc *_get_type_doc(TypeInterface &itype) {
String doc_name = itype.name.begins_with("_") ? itype.name.substr(1) : itype.name;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs
index 8598c32760..5163ea5113 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Array.cs
@@ -554,6 +554,7 @@ namespace Godot.Collections
// instead of growing it as we add items.
if (collection.TryGetNonEnumeratedCount(out int count))
{
+ int oldCount = Count;
Resize(Count + count);
using var enumerator = collection.GetEnumerator();
@@ -561,7 +562,7 @@ namespace Godot.Collections
for (int i = 0; i < count; i++)
{
enumerator.MoveNext();
- this[count + i] = Variant.From(enumerator.Current);
+ this[oldCount + i] = Variant.From(enumerator.Current);
}
return;
@@ -1578,6 +1579,7 @@ namespace Godot.Collections
// instead of growing it as we add items.
if (collection.TryGetNonEnumeratedCount(out int count))
{
+ int oldCount = Count;
Resize(Count + count);
using var enumerator = collection.GetEnumerator();
@@ -1585,7 +1587,7 @@ namespace Godot.Collections
for (int i = 0; i < count; i++)
{
enumerator.MoveNext();
- this[count + i] = enumerator.Current;
+ this[oldCount + i] = enumerator.Current;
}
return;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs
index e849939ebb..0dac8205b6 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2I.cs
@@ -504,15 +504,15 @@ namespace Godot
}
/// <summary>
- /// Converts a <see cref="Vector2"/> to a <see cref="Vector2I"/>.
+ /// Converts a <see cref="Vector2"/> to a <see cref="Vector2I"/> by truncating
+ /// components' fractional parts (rounding towards zero). For a different
+ /// behavior consider passing the result of <see cref="Vector2.Ceil"/>,
+ /// <see cref="Vector2.Floor"/> or <see cref="Vector2.Round"/> to this conversion operator instead.
/// </summary>
/// <param name="value">The vector to convert.</param>
public static explicit operator Vector2I(Vector2 value)
{
- return new Vector2I(
- Mathf.RoundToInt(value.X),
- Mathf.RoundToInt(value.Y)
- );
+ return new Vector2I((int)value.X, (int)value.Y);
}
/// <summary>
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs
index fe899527ef..a2927533f8 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3I.cs
@@ -559,16 +559,15 @@ namespace Godot
}
/// <summary>
- /// Converts a <see cref="Vector3"/> to a <see cref="Vector3I"/>.
+ /// Converts a <see cref="Vector3"/> to a <see cref="Vector3I"/> by truncating
+ /// components' fractional parts (rounding towards zero). For a different
+ /// behavior consider passing the result of <see cref="Vector3.Ceil"/>,
+ /// <see cref="Vector3.Floor"/> or <see cref="Vector3.Round"/> to this conversion operator instead.
/// </summary>
/// <param name="value">The vector to convert.</param>
public static explicit operator Vector3I(Vector3 value)
{
- return new Vector3I(
- Mathf.RoundToInt(value.X),
- Mathf.RoundToInt(value.Y),
- Mathf.RoundToInt(value.Z)
- );
+ return new Vector3I((int)value.X, (int)value.Y, (int)value.Z);
}
/// <summary>
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs
index f065327066..bb552b939d 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector4I.cs
@@ -580,17 +580,15 @@ namespace Godot
}
/// <summary>
- /// Converts a <see cref="Vector4"/> to a <see cref="Vector4I"/>.
+ /// Converts a <see cref="Vector4"/> to a <see cref="Vector4I"/> by truncating
+ /// components' fractional parts (rounding towards zero). For a different
+ /// behavior consider passing the result of <see cref="Vector4.Ceil"/>,
+ /// <see cref="Vector4.Floor"/> or <see cref="Vector4.Round"/> to this conversion operator instead.
/// </summary>
/// <param name="value">The vector to convert.</param>
public static explicit operator Vector4I(Vector4 value)
{
- return new Vector4I(
- Mathf.RoundToInt(value.X),
- Mathf.RoundToInt(value.Y),
- Mathf.RoundToInt(value.Z),
- Mathf.RoundToInt(value.W)
- );
+ return new Vector4I((int)value.X, (int)value.Y, (int)value.Z, (int)value.W);
}
/// <summary>
diff --git a/modules/multiplayer/scene_replication_config.cpp b/modules/multiplayer/scene_replication_config.cpp
index f8006228de..b91c755c62 100644
--- a/modules/multiplayer/scene_replication_config.cpp
+++ b/modules/multiplayer/scene_replication_config.cpp
@@ -51,6 +51,9 @@ bool SceneReplicationConfig::_set(const StringName &p_name, const Variant &p_val
ERR_FAIL_INDEX_V(idx, properties.size(), false);
ReplicationProperty &prop = properties[idx];
if (what == "sync") {
+ if ((bool)p_value == prop.sync) {
+ return true;
+ }
prop.sync = p_value;
if (prop.sync) {
sync_props.push_back(prop.name);
@@ -59,6 +62,9 @@ bool SceneReplicationConfig::_set(const StringName &p_name, const Variant &p_val
}
return true;
} else if (what == "spawn") {
+ if ((bool)p_value == prop.spawn) {
+ return true;
+ }
prop.spawn = p_value;
if (prop.spawn) {
spawn_props.push_back(prop.name);
@@ -132,16 +138,18 @@ void SceneReplicationConfig::add_property(const NodePath &p_path, int p_index) {
spawn_props.clear();
for (const ReplicationProperty &prop : properties) {
if (prop.sync) {
- sync_props.push_back(p_path);
+ sync_props.push_back(prop.name);
}
if (prop.spawn) {
- spawn_props.push_back(p_path);
+ spawn_props.push_back(prop.name);
}
}
}
void SceneReplicationConfig::remove_property(const NodePath &p_path) {
properties.erase(p_path);
+ sync_props.erase(p_path);
+ spawn_props.erase(p_path);
}
bool SceneReplicationConfig::has_property(const NodePath &p_path) const {
@@ -178,7 +186,7 @@ void SceneReplicationConfig::property_set_spawn(const NodePath &p_path, bool p_e
spawn_props.clear();
for (const ReplicationProperty &prop : properties) {
if (prop.spawn) {
- spawn_props.push_back(p_path);
+ spawn_props.push_back(prop.name);
}
}
}
@@ -199,7 +207,7 @@ void SceneReplicationConfig::property_set_sync(const NodePath &p_path, bool p_en
sync_props.clear();
for (const ReplicationProperty &prop : properties) {
if (prop.sync) {
- sync_props.push_back(p_path);
+ sync_props.push_back(prop.name);
}
}
}
diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp
index 4dcdbd6446..a7066bc41c 100644
--- a/modules/navigation/nav_map.cpp
+++ b/modules/navigation/nav_map.cpp
@@ -593,6 +593,7 @@ void NavMap::set_agent_as_controlled(NavAgent *agent) {
if (!exist) {
ERR_FAIL_COND(!has_agent(agent));
controlled_agents.push_back(agent);
+ agents_dirty = true;
}
}
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
index af59fe7dde..4b39a6295c 100644
--- a/modules/openxr/openxr_api.cpp
+++ b/modules/openxr/openxr_api.cpp
@@ -385,8 +385,13 @@ bool OpenXRAPI::create_instance() {
if (XR_FAILED(result)) {
// not fatal probably
print_line("OpenXR: Failed to get XR instance properties [", get_error_string(result), "]");
+
+ runtime_name = "";
+ runtime_version = "";
} else {
- print_line("OpenXR: Running on OpenXR runtime: ", instanceProps.runtimeName, " ", OpenXRUtil::make_xr_version_string(instanceProps.runtimeVersion));
+ runtime_name = instanceProps.runtimeName;
+ runtime_version = OpenXRUtil::make_xr_version_string(instanceProps.runtimeVersion);
+ print_line("OpenXR: Running on OpenXR runtime: ", runtime_name, " ", runtime_version);
}
for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h
index 8c642c4ff4..c8bef5d420 100644
--- a/modules/openxr/openxr_api.h
+++ b/modules/openxr/openxr_api.h
@@ -95,6 +95,10 @@ private:
uint32_t num_swapchain_formats = 0;
int64_t *supported_swapchain_formats = nullptr;
+ // system info
+ String runtime_name;
+ String runtime_version;
+
// configuration
XrFormFactor form_factor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
XrViewConfigurationType view_configuration = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
@@ -294,6 +298,8 @@ public:
XrInstance get_instance() const { return instance; };
XrSystemId get_system_id() const { return system_id; };
XrSession get_session() const { return session; };
+ String get_runtime_name() const { return runtime_name; };
+ String get_runtime_version() const { return runtime_version; };
// helper method to convert an XrPosef to a Transform3D
Transform3D transform_from_pose(const XrPosef &p_pose);
diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp
index 51de9b913a..27344c9da7 100644
--- a/modules/openxr/openxr_interface.cpp
+++ b/modules/openxr/openxr_interface.cpp
@@ -583,6 +583,17 @@ void OpenXRInterface::uninitialize() {
initialized = false;
}
+Dictionary OpenXRInterface::get_system_info() {
+ Dictionary dict;
+
+ if (openxr_api) {
+ dict[SNAME("XRRuntimeName")] = openxr_api->get_runtime_name();
+ dict[SNAME("XRRuntimeVersion")] = openxr_api->get_runtime_version();
+ }
+
+ return dict;
+}
+
bool OpenXRInterface::supports_play_area_mode(XRInterface::PlayAreaMode p_mode) {
return false;
}
diff --git a/modules/openxr/openxr_interface.h b/modules/openxr/openxr_interface.h
index 40ee95f02f..de758a8c2d 100644
--- a/modules/openxr/openxr_interface.h
+++ b/modules/openxr/openxr_interface.h
@@ -112,6 +112,7 @@ public:
virtual bool is_initialized() const override;
virtual bool initialize() override;
virtual void uninitialize() override;
+ virtual Dictionary get_system_info() override;
virtual void trigger_haptic_pulse(const String &p_action_name, const StringName &p_tracker_name, double p_frequency, double p_amplitude, double p_duration_sec, double p_delay_sec = 0) override;
diff --git a/modules/openxr/scene/openxr_hand.cpp b/modules/openxr/scene/openxr_hand.cpp
index e4bd2dab52..e341d2b1d4 100644
--- a/modules/openxr/scene/openxr_hand.cpp
+++ b/modules/openxr/scene/openxr_hand.cpp
@@ -216,7 +216,7 @@ void OpenXRHand::_update_skeleton() {
const auto &pose = location.pose;
if (location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) {
- if (pose.orientation.x != 0 || pose.orientation.y != 0 || pose.orientation.y != 0 || pose.orientation.w != 0) {
+ if (pose.orientation.x != 0 || pose.orientation.y != 0 || pose.orientation.z != 0 || pose.orientation.w != 0) {
quaternions[i] = Quaternion(pose.orientation.x, pose.orientation.y, pose.orientation.z, pose.orientation.w);
inv_quaternions[i] = quaternions[i].inverse();
diff --git a/modules/webxr/webxr_interface_js.cpp b/modules/webxr/webxr_interface_js.cpp
index 97b2eea4d7..d3710bd0df 100644
--- a/modules/webxr/webxr_interface_js.cpp
+++ b/modules/webxr/webxr_interface_js.cpp
@@ -301,6 +301,16 @@ void WebXRInterfaceJS::uninitialize() {
};
};
+Dictionary WebXRInterfaceJS::get_system_info() {
+ Dictionary dict;
+
+ // TODO get actual information from WebXR to return here
+ dict[SNAME("XRRuntimeName")] = String("WebXR");
+ dict[SNAME("XRRuntimeVersion")] = String("");
+
+ return dict;
+}
+
Transform3D WebXRInterfaceJS::_js_matrix_to_transform(float *p_js_matrix) {
Transform3D transform;
diff --git a/modules/webxr/webxr_interface_js.h b/modules/webxr/webxr_interface_js.h
index 31d2e200c0..20516e89e2 100644
--- a/modules/webxr/webxr_interface_js.h
+++ b/modules/webxr/webxr_interface_js.h
@@ -108,6 +108,7 @@ public:
virtual bool is_initialized() const override;
virtual bool initialize() override;
virtual void uninitialize() override;
+ virtual Dictionary get_system_info() override;
virtual Size2 get_render_target_size() override;
virtual uint32_t get_view_count() override;