Răsfoiți Sursa

Merge pull request #11337 from mhilbrunner/cherrypick-sync

Update 4.5 with cherrypicks
Max Hilbrunner 2 luni în urmă
părinte
comite
0a87897f30

+ 94 - 18
_tools/redirects/redirects.csv

@@ -8,9 +8,6 @@ source,destination
 /community/tutorials/vr/index.html,/tutorials/vr/index.html
 /community/tutorials/vr/vr_primer.html,/tutorials/vr/vr_primer.html
 /content/3d/making_trees.html,/tutorials/content/making_trees.html
-/contributing/_contributing.html,/community/contributing/
-/contributing/development/compiling/compiling_with_mono.html,/engine_details/development/compiling/compiling_with_dotnet.html
-/contributing/development/core_and_modules/introduction_to_godot_development.html,/engine_details/development/core_and_modules/index.html
 /development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html
 /development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
 /development/compiling/compiling_for_linuxbsd.html,/engine_details/development/compiling/compiling_for_linuxbsd.html
@@ -27,8 +24,8 @@ source,destination
 /development/compiling/introduction_to_the_buildsystem.html,/engine_details/development/compiling/introduction_to_the_buildsystem.html
 /development/compiling/optimizing_for_size.html,/engine_details/development/compiling/optimizing_for_size.html
 /development/consoles/consoles.html,/tutorials/platform/consoles.html
-/development/cpp/binding_to_external_libraries.html,/engine_details/development/core_and_modules/binding_to_external_libraries.html
-/development/cpp/common_engine_methods_and_macros.html,/engine_details/development/core_and_modules/common_engine_methods_and_macros.html
+/development/cpp/binding_to_external_libraries.html,/engine_details/architecture/binding_to_external_libraries.html
+/development/cpp/common_engine_methods_and_macros.html,/engine_details/architecture/common_engine_methods_and_macros.html
 /development/cpp/configuring_an_ide/android_studio.html,/engine_details/development/configuring_an_ide/android_studio.html
 /development/cpp/configuring_an_ide/clion.html,/engine_details/development/configuring_an_ide/clion.html
 /development/cpp/configuring_an_ide/code_blocks.html,/engine_details/development/configuring_an_ide/code_blocks.html
@@ -38,19 +35,19 @@ source,destination
 /development/cpp/configuring_an_ide/visual_studio.html,/engine_details/development/configuring_an_ide/visual_studio.html
 /development/cpp/configuring_an_ide/visual_studio_code.html,/engine_details/development/configuring_an_ide/visual_studio_code.html
 /development/cpp/configuring_an_ide/xcode.html,/engine_details/development/configuring_an_ide/xcode.html
-/development/cpp/core_types.html,/engine_details/development/core_and_modules/core_types.html
-/development/cpp/custom_audiostreams.html,/engine_details/development/core_and_modules/custom_audiostreams.html
-/development/cpp/custom_godot_servers.html,/engine_details/development/core_and_modules/custom_godot_servers.html
-/development/cpp/custom_modules_in_cpp.html,/engine_details/development/core_and_modules/custom_modules_in_cpp.html
-/development/cpp/custom_resource_format_loaders.html,/engine_details/development/core_and_modules/custom_resource_format_loaders.html
-/development/cpp/index.html,/engine_details/development/core_and_modules/index.html
-/development/cpp/inheritance_class_tree.html,/engine_details/development/core_and_modules/inheritance_class_tree.html
-/development/cpp/introduction_to_godot_development.html,/engine_details/development/core_and_modules/introduction_to_godot_development.html
+/development/cpp/core_types.html,/engine_details/architecture/core_types.html
+/development/cpp/custom_audiostreams.html,/engine_details/architecture/custom_audiostreams.html
+/development/cpp/custom_godot_servers.html,/engine_details/architecture/custom_godot_servers.html
+/development/cpp/custom_modules_in_cpp.html,/engine_details/architecture/custom_modules_in_cpp.html
+/development/cpp/custom_resource_format_loaders.html,/engine_details/architecture/custom_resource_format_loaders.html
+/development/cpp/index.html,/engine_details/architecture/index.html
+/development/cpp/inheritance_class_tree.html,/engine_details/architecture/inheritance_class_tree.html
+/development/cpp/introduction_to_godot_development.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
 /development/cpp/macos_debug.html,/engine_details/development/debugging/macos_debug.html
-/development/cpp/object_class.html,/engine_details/development/core_and_modules/object_class.html
-/development/cpp/unit_testing.html,/engine_details/development/core_and_modules/unit_testing.html
+/development/cpp/object_class.html,/engine_details/architecture/object_class.html
+/development/cpp/unit_testing.html,/engine_details/architecture/unit_testing.html
 /development/cpp/using_cpp_profilers.html,/engine_details/development/debugging/using_cpp_profilers.html
-/development/cpp/variant_class.html,/engine_details/development/core_and_modules/variant_class.html
+/development/cpp/variant_class.html,/engine_details/architecture/variant_class.html
 /development/cpp/vulkan/index.html,/engine_details/development/debugging/vulkan/index.html
 /development/cpp/vulkan/vulkan_validation_layers.html,/engine_details/development/debugging/vulkan/vulkan_validation_layers.html
 /development/editor/creating_icons.html,/engine_details/editor/creating_icons.html
@@ -297,7 +294,7 @@ source,destination
 /reference/gdscript_more_efficiently.html,/learning/scripting/gdscript/gdscript_advanced.html
 /reference/gdscript_printf.html,/learning/scripting/gdscript/gdscript_format_string.html
 /reference/inheritance_class_tree.html,/development/cpp/inheritance_class_tree.html
-/reference/introduction_to_godot_development.html,/development/cpp/introduction_to_godot_development.html
+/reference/introduction_to_godot_development.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
 /reference/introduction_to_the_buildsystem.html,/development/compiling/introduction_to_the_buildsystem.html
 /reference/locales.html,/learning/features/misc/locales.html
 /reference/object_class.html,/development/cpp/object_class.html
@@ -403,6 +400,85 @@ source,destination
 /tutorials/viewports/multiple_resolutions.html,/tutorials/rendering/multiple_resolutions.html
 /tutorials/viewports/using_viewport_as_texture.html,/tutorials/shaders/using_viewport_as_texture.html
 /tutorials/viewports/viewports.html,/tutorials/rendering/viewports.html
-/contributing/development/compiling/compiling_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
 /tutorials/export/exporting_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
 /tutorials/xr/openxr_passthrough.html,/tutorials/xr/ar_passthrough.html
+/contributing/development/compiling/compiling_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
+/contributing/_contributing.html,https://contributing.godotengine.org
+/contributing/development/compiling/compiling_with_mono.html,/engine_details/development/compiling/compiling_with_dotnet.html
+/contributing/architecture/introduction_to_godot_development.html,/engine_details/architecture/index.html
+/contributing/development/best_practices_for_engine_contributors.html,https://contributing.godotengine.org/en/latest/engine/guidelines/best_practices.html
+/contributing/development/code_style_guidelines.html,https://contributing.godotengine.org/en/latest/engine/guidelines/code_style.html
+/contributing/development/cpp_usage_guidelines.html,https://contributing.godotengine.org/en/latest/engine/guidelines/cpp_usage_guidelines.html
+/contributing/development/editor/editor_style_guide.html,https://contributing.godotengine.org/en/latest/engine/guidelines/editor_style_guide.html
+/contributing/development/editor/index.html,/engine_details/editor/index.html
+/contributing/development/index.html,/engine_details/development/index.html
+/contributing/documentation/building_the_manual.html,https://contributing.godotengine.org/en/latest/documentation/manual/building_the_manual.html
+/contributing/documentation/content_guidelines.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/content_guidelines.html
+/contributing/documentation/contributing_to_the_documentation.html,https://contributing.godotengine.org/en/latest/documentation/manual/index.html
+/contributing/documentation/docs_contribution_checklist.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/docs_contribution_checklist.html
+/contributing/documentation/docs_image_guidelines.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/docs_image_guidelines.html
+/contributing/documentation/docs_writing_guidelines.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/docs_writing_guidelines.html
+/contributing/documentation/editor_and_docs_localization.html,https://contributing.godotengine.org/en/latest/documentation/translation/index.html
+/contributing/documentation/index.html,https://contributing.godotengine.org/en/latest/documentation/overview.html
+/contributing/documentation/updating_the_class_reference.html,https://contributing.godotengine.org/en/latest/documentation/class_reference.html
+/contributing/how_to_contribute.html,https://contributing.godotengine.org/en/latest/organization/how_to_contribute.html
+/contributing/workflow/bisecting_regressions.html,https://contributing.godotengine.org/en/latest/reporting_issues/bisecting.html
+/contributing/workflow/bug_triage_guidelines.html,https://contributing.godotengine.org/en/latest/triage/guidelines.html
+/contributing/workflow/first_steps.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
+/contributing/workflow/index.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
+/contributing/workflow/pr_review_guidelines.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/review_guidelines.html
+/contributing/workflow/pr_workflow.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/creating_pull_requests.html
+/contributing/workflow/testing_pull_requests.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/testing.html
+/contributing/development/core_and_modules/2d_coordinate_systems.html,/engine_details/architecture/2d_coordinate_systems.html
+/contributing/development/core_and_modules/common_engine_methods_and_macros.html,/engine_details/architecture/common_engine_methods_and_macros.html
+/contributing/development/core_and_modules/core_types.html,//architecture/core_types.html
+/contributing/development/core_and_modules/custom_audiostreams.html,//architecture/custom_audiostreams.html
+/contributing/development/core_and_modules/custom_godot_servers.html,//architecture/custom_godot_servers.html
+/contributing/development/core_and_modules/custom_modules_in_cpp.html,//architecture/custom_modules_in_cpp.html
+/contributing/development/core_and_modules/custom_platform_ports.html,//architecture/custom_platform_ports.html
+/contributing/development/core_and_modules/custom_resource_format_loaders.html,//architecture/custom_resource_format_loaders.html
+/contributing/development/core_and_modules/godot_architecture_diagram.html,//architecture/godot_architecture_diagram.html
+/contributing/development/core_and_modules/index.html,//architecture/index.html
+/contributing/development/core_and_modules/inheritance_class_tree.html,//architecture/inheritance_class_tree.html
+/contributing/development/core_and_modules/internal_rendering_architecture.html,//architecture/internal_rendering_architecture.html
+/contributing/development/core_and_modules/object_class.html,//architecture/object_class.html
+/contributing/development/core_and_modules/scripting_development.html,//architecture/scripting_development.html
+/contributing/development/core_and_modules/unit_testing.html,//architecture/unit_testing.html
+/contributing/development/core_and_modules/variant_class.html,//architecture/variant_class.html
+/contributing/documentation/class_reference_primer.html,engine_details/class_reference/index.html
+/contributing/development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html,
+/contributing/development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
+/contributing/development/compiling/compiling_for_linuxbsd.html,/engine_details/development/compiling/compiling_for_linuxbsd.html
+/contributing/development/compiling/compiling_for_macos.html,/engine_details/development/compiling/compiling_for_macos.html
+/contributing/development/compiling/compiling_for_visionos.html,/engine_details/development/compiling/compiling_for_visionos.html
+/contributing/development/compiling/compiling_for_web.html,/engine_details/development/compiling/compiling_for_web.html
+/contributing/development/compiling/compiling_for_windows.html,/engine_details/development/compiling/compiling_for_windows.html
+/contributing/development/compiling/compiling_with_dotnet.html,/engine_details/development/compiling/compiling_with_dotnet.html
+/contributing/development/compiling/compiling_with_script_encryption_key.html,/engine_details/development/compiling/compiling_with_script_encryption_key.html
+/contributing/development/compiling/cross-compiling_for_ios_on_linux.html,/engine_details/development/compiling/cross-compiling_for_ios_on_linux.html
+/contributing/development/compiling/getting_source.html,/engine_details/development/compiling/getting_source.html
+/contributing/development/compiling/index.html,/engine_details/development/compiling/index.html
+/contributing/development/compiling/introduction_to_the_buildsystem.html,/engine_details/development/compiling/introduction_to_the_buildsystem.html
+/contributing/development/compiling/optimizing_for_size.html,/engine_details/development/compiling/optimizing_for_size.html
+/contributing/development/configuring_an_ide/android_studio.html,/engine_details/development/configuring_an_ide/android_studio.html
+/contributing/development/configuring_an_ide/clion.html,/engine_details/development/configuring_an_ide/clion.html
+/contributing/development/configuring_an_ide/code_blocks.html,/engine_details/development/configuring_an_ide/code_blocks.html
+/contributing/development/configuring_an_ide/index.html,/engine_details/development/configuring_an_ide/index.html
+/contributing/development/configuring_an_ide/kdevelop.html,/engine_details/development/configuring_an_ide/kdevelop.html
+/contributing/development/configuring_an_ide/qt_creator.html,/engine_details/development/configuring_an_ide/qt_creator.html
+/contributing/development/configuring_an_ide/rider.html,/engine_details/development/configuring_an_ide/rider.html
+/contributing/development/configuring_an_ide/rider.html,/engine_details/development/configuring_an_ide/rider.html
+/contributing/development/configuring_an_ide/visual_studio.html,/engine_details/development/configuring_an_ide/visual_studio.html
+/contributing/development/configuring_an_ide/visual_studio_code.html,/engine_details/development/configuring_an_ide/visual_studio_code.html
+/contributing/development/configuring_an_ide/xcode.html,/engine_details/development/configuring_an_ide/xcode.html
+/contributing/development/debugging/index.html,/engine_details/development/debugging/index.html
+/contributing/development/debugging/macos_debug.html,/engine_details/development/debugging/macos_debug.html
+/contributing/development/debugging/using_cpp_profilers.html,/engine_details/development/debugging/using_cpp_profilers.html
+/contributing/development/debugging/using_sanitizers.html,/engine_details/development/debugging/using_sanitizers.html
+/contributing/development/debugging/vulkan/index.html,/engine_details/development/debugging/vulkan/index.html
+/contributing/development/debugging/vulkan/vulkan_validation_layers.html,/engine_details/development/debugging/vulkan/vulkan_validation_layers.html
+/contributing/development/handling_compatibility_breakages.html,/engine_details/development/handling_compatibility_breakages.html
+/contributing/development/editor/creating_icons.html,/engine_details/editor/creating_icons.html
+/contributing/development/editor/index.html,/engine_details/editor/index.html
+/contributing/development/editor/introduction_to_editor_development.html,/engine_details/editor/introduction_to_editor_development.html
+/contributing/development/file_formats/gdscript_grammar.html,/engine_details/file_formats/gdscript_grammar.html

+ 1 - 1
about/complying_with_licenses.rst

@@ -44,7 +44,7 @@ text somewhere in your game or derivative project.
 
 This text reads as follows:
 
-::
+.. code-block:: none
 
     This game uses Godot Engine, available under the following license:
 

+ 13 - 9
engine_details/architecture/core_types.rst

@@ -142,7 +142,7 @@ scripting API.
 | Godot datatype        | Closest C++ STL datatype | Comment                                                                               |
 +=======================+==========================+=======================================================================================+
 | |string| 📜           | ``std::string``          | **Use this as the "default" string type.** ``String`` uses UTF-32 encoding            |
-|                       |                          | to improve performance thanks to its fixed character size.                            |
+|                       |                          | to simplify processing thanks to its fixed character size.                            |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |vector|              | ``std::vector``          | **Use this as the "default" vector type.** Uses copy-on-write (COW) semantics.        |
 |                       |                          | This means it's generally slower but can be copied around almost for free.            |
@@ -180,8 +180,10 @@ scripting API.
 |                       |                          | no heap allocations.                                                                  |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |span|                | ``std::span``            | Represents read-only access to a contiguous array without needing to copy any data.   |
-|                       |                          | See `pull request description <https://github.com/godotengine/godot/pull/100293>`__   |
-|                       |                          | for details.                                                                          |
+|                       |                          | Note that ``Span`` is designed to be a high performance API: It does not perform      |
+|                       |                          | parameter correctness checks in the same way you might be used to with other Godot    |
+|                       |                          | containers. Use with care.                                                            |
+|                       |                          | `Span` can be constructed from most array-like containers (e.g. ``vector.span()``).   |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |rb_set|              | ``std::set``             | Uses a `red-black tree <https://en.wikipedia.org/wiki/Red-black_tree>`__              |
 |                       |                          | for faster access.                                                                    |
@@ -195,8 +197,9 @@ scripting API.
 |                       |                          | Use this map type when either of these affordances are needed. Use ``AHashMap``       |
 |                       |                          | otherwise.                                                                            |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
-| |rb_map|              | ``std::map``             | Uses a `red-black tree <https://en.wikipedia.org/wiki/Red-black-tree>`__              |
-|                       |                          | for faster access.                                                                    |
+| |rb_map|              | ``std::map``             | Map type that uses a                                                                  |
+|                       |                          | `red-black tree <https://en.wikipedia.org/wiki/Red-black-tree>`__ to find keys.       |
+|                       |                          | The performance benefits of ``RBMap`` aren't established, so prefer using other types.|
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |dictionary| 📜       | ``std::unordered_map``   | Keys and values can be of any Variant type. No static typing is imposed.              |
 |                       |                          | Uses shared reference counting, similar to ``std::shared_ptr``.                       |
@@ -204,7 +207,8 @@ scripting API.
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |typed_dictionary| 📜 | ``std::unordered_map``   | Subclass of ``Dictionary`` but with static typing for its keys and values.            |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
-| |pair|                | ``std::pair``            | Stores a single key-value pair.                                                       |
+| |pair|                | ``std::pair``            | Stores a single pair. See also ``KeyValue`` in the same file, which uses read-only    |
+|                       |                          | keys.                                                                                 |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 
 .. |string| replace:: `String <https://github.com/godotengine/godot/blob/master/core/string/ustring.h>`__
@@ -214,8 +218,8 @@ scripting API.
 .. |string_name| replace:: `StringName <https://github.com/godotengine/godot/blob/master/core/string/string_name.h>`__
 .. |local_vector| replace:: `LocalVector <https://github.com/godotengine/godot/blob/master/core/templates/local_vector.h>`__
 .. |array| replace:: `Array <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
-.. |typed_array| replace:: `TypedArray <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
-.. |packed_array| replace:: `Packed*Array <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
+.. |typed_array| replace:: `TypedArray <https://github.com/godotengine/godot/blob/master/core/variant/typed_array.h>`__
+.. |packed_array| replace:: `Packed*Array <https://github.com/godotengine/godot/blob/master/core/variant/variant.h>`__
 .. |list| replace:: `List <https://github.com/godotengine/godot/blob/master/core/templates/list.h>`__
 .. |fixed_vector| replace:: `FixedVector <https://github.com/godotengine/godot/blob/master/core/templates/fixed_vector.h>`__
 .. |span| replace:: `Span <https://github.com/godotengine/godot/blob/master/core/templates/span.h>`__
@@ -224,7 +228,7 @@ scripting API.
 .. |a_hash_map| replace:: `AHashMap <https://github.com/godotengine/godot/blob/master/core/templates/a_hash_map.h>`__
 .. |rb_map| replace:: `RBMap <https://github.com/godotengine/godot/blob/master/core/templates/rb_map.h>`__
 .. |dictionary| replace:: `Dictionary <https://github.com/godotengine/godot/blob/master/core/variant/dictionary.h>`__
-.. |typed_dictionary| replace:: `TypedDictionary <https://github.com/godotengine/godot/blob/master/core/variant/dictionary.h>`__
+.. |typed_dictionary| replace:: `TypedDictionary <https://github.com/godotengine/godot/blob/master/core/variant/typed_dictionary.h>`__
 .. |pair| replace:: `Pair <https://github.com/godotengine/godot/blob/master/core/templates/pair.h>`__
 
 Math types

+ 1 - 1
engine_details/architecture/internal_rendering_architecture.rst

@@ -300,7 +300,7 @@ This diagram represents the structure of rendering classes in Godot, including t
 
 .. image:: img/rendering_architecture_diagram.webp
 
-`View at full size <https://raw.githubusercontent.com/godotengine/godot-docs/master/contributing/development/core_and_modules/img/rendering_architecture_diagram.webp>`__
+`View at full size <https://raw.githubusercontent.com/godotengine/godot-docs/master/engine_details/architecture/img/rendering_architecture_diagram.webp>`__
 
 .. _doc_internal_rendering_architecture_core_shaders:
 

+ 8 - 0
engine_details/development/compiling/compiling_for_ios.rst

@@ -74,6 +74,14 @@ The MoltenVK static ``.xcframework`` folder must also be placed in the
 ``ios_xcode`` folder once it has been created. MoltenVK is always statically
 linked on iOS; there is no dynamic linking option available, unlike macOS.
 
+.. warning::
+
+    Compiling for the iOS simulator is currently not supported as per
+    `GH-102149 <https://github.com/godotengine/godot/issues/102149>`__.
+
+    Apple Silicon Macs can run iOS apps natively, so you can run exported iOS projects
+    directly on an Apple Silicon Mac without needing the iOS simulator.
+
 Run
 ---
 

+ 85 - 79
tutorials/editor/default_key_mapping.rst

@@ -251,85 +251,91 @@ Others must be manually bound in the Editor Settings if desired.
 Text editor
 -----------
 
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Action name               | Windows, Linux                  | macOS                            | Editor setting                                  |
-+===========================+=================================+==================================+=================================================+
-| Cut                       | :kbd:`Ctrl + X`                 | :kbd:`Cmd + X`                   | ``script_text_editor/cut``                      |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Copy                      | :kbd:`Ctrl + C`                 | :kbd:`Cmd + C`                   | ``script_text_editor/copy``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Paste                     | :kbd:`Ctrl + V`                 | :kbd:`Cmd + V`                   | ``script_text_editor/paste``                    |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Select All                | :kbd:`Ctrl + A`                 | :kbd:`Cmd + A`                   | ``script_text_editor/select_all``               |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find                      | :kbd:`Ctrl + F`                 | :kbd:`Cmd + F`                   | ``script_text_editor/find``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find Next                 | :kbd:`F3`                       | :kbd:`Cmd + G`                   | ``script_text_editor/find_next``                |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find Previous             | :kbd:`Shift + F3`               | :kbd:`Cmd + Shift + G`           | ``script_text_editor/find_previous``            |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find in Files             | :kbd:`Ctrl + Shift + F`         | :kbd:`Cmd + Shift + F`           | ``script_text_editor/find_in_files``            |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Replace                   | :kbd:`Ctrl + R`                 | :kbd:`Opt + Cmd + F`             | ``script_text_editor/replace``                  |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Replace in Files          | :kbd:`Ctrl + Shift + R`         | :kbd:`Cmd + Shift + R`           | ``script_text_editor/replace_in_files``         |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Undo                      | :kbd:`Ctrl + Z`                 | :kbd:`Cmd + Z`                   | ``script_text_editor/undo``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Redo                      | :kbd:`Ctrl + Y`                 | :kbd:`Cmd + Y`                   | ``script_text_editor/redo``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Move Up                   | :kbd:`Alt + Up Arrow`           | :kbd:`Opt + Up Arrow`            | ``script_text_editor/move_up``                  |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Move Down                 | :kbd:`Alt + Down Arrow`         | :kbd:`Opt + Down Arrow`          | ``script_text_editor/move_down``                |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Delete Line               | :kbd:`Ctrl + Shift + K`         | :kbd:`Cmd + Shift + K`           | ``script_text_editor/delete_line``              |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Toggle Comment            | :kbd:`Ctrl + K`                 | :kbd:`Cmd + K`                   | ``script_text_editor/toggle_comment``           |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Fold/Unfold Line          | :kbd:`Alt + F`                  | :kbd:`Ctrl + Cmd + F`            | ``script_text_editor/toggle_fold_line``         |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Duplicate Lines           | :kbd:`Ctrl + Alt + Down Arrow`  | :kbd:`Cmd + Shift + Down Arrow`  | ``script_text_editor/duplicate_lines``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Duplicate Selection       | :kbd:`Ctrl + Shift + D`         | :kbd:`Cmd + Shift + C`           | ``script_text_editor/duplicate_selection``      |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Complete Symbol           | :kbd:`Ctrl + Space`             | :kbd:`Ctrl + Space`              | ``script_text_editor/complete_symbol``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Evaluate Selection        | :kbd:`Ctrl + Shift + E`         | :kbd:`Cmd + Shift + E`           | ``script_text_editor/evaluate_selection``       |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Trim Trailing Whitespace  | :kbd:`Ctrl + Alt + T`           | :kbd:`Opt + Cmd + T`             | ``script_text_editor/trim_trailing_whitespace`` |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Uppercase                 | :kbd:`Shift + F4`               | :kbd:`Shift + F4`                | ``script_text_editor/convert_to_uppercase``     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Lowercase                 | :kbd:`Shift + F5`               | :kbd:`Shift + F5`                | ``script_text_editor/convert_to_lowercase``     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Capitalize                | :kbd:`Shift + F6`               | :kbd:`Shift + F6`                | ``script_text_editor/capitalize``               |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Convert Indent to Spaces  | :kbd:`Ctrl + Shift + Y`         | :kbd:`Cmd + Shift + Y`           | ``script_text_editor/convert_indent_to_spaces`` |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Convert Indent to Tabs    | :kbd:`Ctrl + Shift + I`         | :kbd:`Cmd + Shift + I`           | ``script_text_editor/convert_indent_to_tabs``   |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Auto Indent               | :kbd:`Ctrl + I`                 | :kbd:`Cmd + I`                   | ``script_text_editor/auto_indent``              |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Toggle Bookmark           | :kbd:`Ctrl + Alt + B`           | :kbd:`Opt + Cmd + B`             | ``script_text_editor/toggle_bookmark``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Next Bookmark       | :kbd:`Ctrl + B`                 | :kbd:`Cmd + B`                   | ``script_text_editor/goto_next_bookmark``       |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Previous Bookmark   | :kbd:`Ctrl + Shift + B`         | :kbd:`Cmd + Shift + B`           | ``script_text_editor/goto_previous_bookmark``   |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Function            | :kbd:`Ctrl + Alt + F`           | :kbd:`Ctrl + Cmd + J`            | ``script_text_editor/goto_function``            |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Line                | :kbd:`Ctrl + L`                 | :kbd:`Cmd + L`                   | ``script_text_editor/goto_line``                |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Toggle Breakpoint         | :kbd:`F9`                       | :kbd:`Cmd + Shift + B`           | ``script_text_editor/toggle_breakpoint``        |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Remove All Breakpoints    | :kbd:`Ctrl + Shift + F9`        | :kbd:`Cmd + Shift + F9`          | ``script_text_editor/remove_all_breakpoints``   |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Next Breakpoint     | :kbd:`Ctrl + .`                 | :kbd:`Cmd + .`                   | ``script_text_editor/goto_next_breakpoint``     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Previous Breakpoint | :kbd:`Ctrl + ,`                 | :kbd:`Cmd + ,`                   | ``script_text_editor/goto_previous_breakpoint`` |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Contextual Help           | :kbd:`Alt + F1`                 | :kbd:`Opt + Shift + Space`       | ``script_text_editor/contextual_help``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Action name               | Windows, Linux                  | macOS                            | Editor setting                                       |
++===========================+=================================+==================================+======================================================+
+| Cut                       | :kbd:`Ctrl + X`                 | :kbd:`Cmd + X`                   | ``script_text_editor/cut``                           |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Copy                      | :kbd:`Ctrl + C`                 | :kbd:`Cmd + C`                   | ``script_text_editor/copy``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Paste                     | :kbd:`Ctrl + V`                 | :kbd:`Cmd + V`                   | ``script_text_editor/paste``                         |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select All                | :kbd:`Ctrl + A`                 | :kbd:`Cmd + A`                   | ``script_text_editor/select_all``                    |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find                      | :kbd:`Ctrl + F`                 | :kbd:`Cmd + F`                   | ``script_text_editor/find``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find Next                 | :kbd:`F3`                       | :kbd:`Cmd + G`                   | ``script_text_editor/find_next``                     |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find Previous             | :kbd:`Shift + F3`               | :kbd:`Cmd + Shift + G`           | ``script_text_editor/find_previous``                 |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find in Files             | :kbd:`Ctrl + Shift + F`         | :kbd:`Cmd + Shift + F`           | ``script_text_editor/find_in_files``                 |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Replace                   | :kbd:`Ctrl + R`                 | :kbd:`Opt + Cmd + F`             | ``script_text_editor/replace``                       |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Replace in Files          | :kbd:`Ctrl + Shift + R`         | :kbd:`Cmd + Shift + R`           | ``script_text_editor/replace_in_files``              |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Undo                      | :kbd:`Ctrl + Z`                 | :kbd:`Cmd + Z`                   | ``script_text_editor/undo``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Redo                      | :kbd:`Ctrl + Y`                 | :kbd:`Cmd + Y`                   | ``script_text_editor/redo``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Move Up                   | :kbd:`Alt + Up Arrow`           | :kbd:`Opt + Up Arrow`            | ``script_text_editor/move_up``                       |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Move Down                 | :kbd:`Alt + Down Arrow`         | :kbd:`Opt + Down Arrow`          | ``script_text_editor/move_down``                     |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Delete Line               | :kbd:`Ctrl + Shift + K`         | :kbd:`Cmd + Shift + K`           | ``script_text_editor/delete_line``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Toggle Comment            | :kbd:`Ctrl + K`                 | :kbd:`Cmd + K`                   | ``script_text_editor/toggle_comment``                |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Fold/Unfold Line          | :kbd:`Alt + F`                  | :kbd:`Ctrl + Cmd + F`            | ``script_text_editor/toggle_fold_line``              |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Duplicate Lines           | :kbd:`Ctrl + Alt + Down Arrow`  | :kbd:`Cmd + Shift + Down Arrow`  | ``script_text_editor/duplicate_lines``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Duplicate Selection       | :kbd:`Ctrl + Shift + D`         | :kbd:`Cmd + Shift + C`           | ``script_text_editor/duplicate_selection``           |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select Down               | :kbd:`Ctrl + Shift + Down Arrow`| :kbd:`Shift + Opt + Down Arrow`  | ``common/ui_text_caret_add_below``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select Up                 | :kbd:`Ctrl + Shift + Up Arrow`  | :kbd:`Shift + Opt + Up Arrow`    | ``common/ui_text_caret_add_above``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select Next Occurrence    | :kbd:`Ctrl + D`                 | :kbd:`Cmd + D`                   | ``common/ui_text_add_selection_for_next_occurrence`` |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Complete Symbol           | :kbd:`Ctrl + Space`             | :kbd:`Ctrl + Space`              | ``script_text_editor/complete_symbol``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Evaluate Selection        | :kbd:`Ctrl + Shift + E`         | :kbd:`Cmd + Shift + E`           | ``script_text_editor/evaluate_selection``            |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Trim Trailing Whitespace  | :kbd:`Ctrl + Alt + T`           | :kbd:`Opt + Cmd + T`             | ``script_text_editor/trim_trailing_whitespace``      |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Uppercase                 | :kbd:`Shift + F4`               | :kbd:`Shift + F4`                | ``script_text_editor/convert_to_uppercase``          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Lowercase                 | :kbd:`Shift + F5`               | :kbd:`Shift + F5`                | ``script_text_editor/convert_to_lowercase``          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Capitalize                | :kbd:`Shift + F6`               | :kbd:`Shift + F6`                | ``script_text_editor/capitalize``                    |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Convert Indent to Spaces  | :kbd:`Ctrl + Shift + Y`         | :kbd:`Cmd + Shift + Y`           | ``script_text_editor/convert_indent_to_spaces``      |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Convert Indent to Tabs    | :kbd:`Ctrl + Shift + I`         | :kbd:`Cmd + Shift + I`           | ``script_text_editor/convert_indent_to_tabs``        |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Auto Indent               | :kbd:`Ctrl + I`                 | :kbd:`Cmd + I`                   | ``script_text_editor/auto_indent``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Toggle Bookmark           | :kbd:`Ctrl + Alt + B`           | :kbd:`Opt + Cmd + B`             | ``script_text_editor/toggle_bookmark``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Next Bookmark       | :kbd:`Ctrl + B`                 | :kbd:`Cmd + B`                   | ``script_text_editor/goto_next_bookmark``            |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Previous Bookmark   | :kbd:`Ctrl + Shift + B`         | :kbd:`Cmd + Shift + B`           | ``script_text_editor/goto_previous_bookmark``        |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Function            | :kbd:`Ctrl + Alt + F`           | :kbd:`Ctrl + Cmd + J`            | ``script_text_editor/goto_function``                 |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Line                | :kbd:`Ctrl + L`                 | :kbd:`Cmd + L`                   | ``script_text_editor/goto_line``                     |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Toggle Breakpoint         | :kbd:`F9`                       | :kbd:`Cmd + Shift + B`           | ``script_text_editor/toggle_breakpoint``             |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Remove All Breakpoints    | :kbd:`Ctrl + Shift + F9`        | :kbd:`Cmd + Shift + F9`          | ``script_text_editor/remove_all_breakpoints``        |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Next Breakpoint     | :kbd:`Ctrl + .`                 | :kbd:`Cmd + .`                   | ``script_text_editor/goto_next_breakpoint``          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Previous Breakpoint | :kbd:`Ctrl + ,`                 | :kbd:`Cmd + ,`                   | ``script_text_editor/goto_previous_breakpoint``      |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Contextual Help           | :kbd:`Alt + F1`                 | :kbd:`Opt + Shift + Space`       | ``script_text_editor/contextual_help``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
 
 Script editor
 -------------

+ 2 - 2
tutorials/editor/inspector_dock.rst

@@ -18,7 +18,7 @@ Usage
 If the inspector dock is visible, clicking on a node in the scene tree will automatically
 display its properties.
 If it is not visible, you can show it by navigating to
-**Editor > Editor Settings > Editor Docks > Inspector**.
+**Editor > Editor Docks > Inspector**.
 
 At the top of the dock are the file and navigation buttons.
 
@@ -129,4 +129,4 @@ various view and edit options.
 .. Using the tool menu
 .. List each property type and how to edit it
 .. For numerical inputs, mention and link to a page about formulas
-.. Refer to :ref:`doc_filesystem_dock`
+.. Refer to :ref:`doc_filesystem_dock`

+ 9 - 0
tutorials/export/exporting_for_ios.rst

@@ -57,6 +57,15 @@ When the export completes, the output folder should look like this:
 
 .. image:: img/ios_export_output.webp
 
+
+.. warning::
+
+    Exporting for the iOS simulator is currently not supported as per
+    `GH-102149 <https://github.com/godotengine/godot/issues/102149>`__.
+
+    Apple Silicon Macs can run iOS apps natively, so you can run exported iOS projects
+    directly on an Apple Silicon Mac without needing the iOS simulator.
+
 Opening **exported_xcode_project_name.xcodeproj** lets you build and deploy
 like any other iOS app.
 

+ 1 - 1
tutorials/migrating/upgrading_to_godot_4.1.rst

@@ -195,7 +195,7 @@ Method ``create_action`` adds a new ``backward_undo_ops`` optional parameter
 Behavior changes
 ----------------
 
-In 4.1 some behavior changes have been introduced, which might require you to adjust your project.
+In 4.1, some behavior changes have been introduced, which might require you to adjust your project.
 
 ==================================================================================================================================================================================================  ===========
 Change                                                                                                                                                                                              Introduced

+ 2 - 2
tutorials/migrating/upgrading_to_godot_4.3.rst

@@ -224,7 +224,7 @@ Type renamed to ``EditorSceneFormatImporterFBX2GLTF``
 Behavior changes
 ----------------
 
-In 4.3 some behavior changes have been introduced, which might require you to adjust your project.
+In 4.3, some behavior changes have been introduced, which might require you to adjust your project.
 
 Core
 ~~~~
@@ -299,7 +299,7 @@ Multiplayer
 
     This is a breaking change for the high-level multiplayer protocol making it incompatible with previous Godot versions.
     Upgrade both your server and client versions to Godot 4.3 to handle this change gracefully.
-    
+
     Note that high-level multiplayer facilities are only ever meant to be compatible with server and client using the same Godot version. It is recommended to implement some kind of version checking.
 
 Rendering

+ 56 - 3
tutorials/migrating/upgrading_to_godot_4.5.rst

@@ -39,7 +39,7 @@ Core
 Change                                                                                                                    GDScript Compatible  C# Binary Compatible  C# Source Compatible  Introduced
 ========================================================================================================================  ===================  ====================  ====================  ============
 **JSONRPC**
-Method ``set_scope`` replaced by ``set_method`` optional parameter                                                        |❌|                 |✔️ with compat|      |✔️ with compat|      `GH-104890`_
+Method ``set_scope`` replaced by ``set_method``                                                                           |❌|                 |❌ with stub|        |❌ with stub|        `GH-104890`_
 **Node**
 Method ``get_rpc_config`` renamed to ``get_node_rpc_config``                                                              |❌|                 |✔️ with compat|      |✔️ with compat|      `GH-106848`_
 Method ``set_name`` changes ``name`` parameter type from ``String`` to ``StringName``                                     |✔️|                 |✔️ with compat|      |✔️ with compat|      `GH-76560`_
@@ -64,7 +64,7 @@ Method ``instance_set_interpolated`` removed
 .. note::
 
     In C#, the enum ``RenderingDevice.Features`` breaks compatibility because of the way the bindings generator
-    detects the enum prefix. New members where added to the enum in `GH-103941`_ that caused the enum member
+    detects the enum prefix. New members were added to the enum in `GH-103941`_ that caused the enum member
     ``Address`` to be renamed to ``BufferDeviceAddress``.
 
 GLTF
@@ -188,7 +188,19 @@ Method ``_get_option_icon`` changes return type from ``ImageTexture`` to ``Textu
 Behavior changes
 ----------------
 
-In 4.5 some behavior changes have been introduced, which might require you to adjust your project.
+In 4.5, some behavior changes have been introduced, which might require you to adjust your project.
+
+TileMapLayer
+~~~~~~~~~~~~
+
+:ref:`TileMapLayer.get_coords_for_body_rid() <class_TileMapLayer_method_get_coords_for_body_rid>`
+will return different values in 4.5 compared to 4.4,
+as TileMapLayer physics chunking is enabled by default. Higher values of
+:ref:`TileMapLayer.physics_quadrant_size <class_TileMapLayer_property_physics_quadrant_size>`
+will make this function less precise. To get the exact cell coordinates like in 4.4 and prior
+versions, you need to set
+:ref:`TileMapLayer.physics_quadrant_size <class_TileMapLayer_property_physics_quadrant_size>`
+to ``1``, which disables physics chunking.
 
 3D Model Import
 ~~~~~~~~~~~~~~~
@@ -204,6 +216,27 @@ new behavior, you must change the "Naming Version" option at the bottom of the I
 Core
 ~~~~
 
+.. note::
+
+    :ref:`Resource.duplicate(true) <class_Resource_method_duplicate>` (which performs
+    deep duplication) now only duplicates resources internal to the resource file
+    it's called on. In 4.4, this duplicated everything instead, including external resources.
+    If you were deep-duplicating a resource that contained references to other
+    external resources, those external resources aren't duplicated anymore. You must call
+    :ref:`Resource.duplicate_deep(RESOURCE_DEEP_DUPLICATE_ALL) <class_Resource_method_duplicate_deep>`
+    instead to keep the old behavior.
+
+.. note::
+
+    :ref:`ProjectSettings.add_property_info() <class_ProjectSettings_method_add_property_info>`
+    now prints a warning when the dictionary parameter has missing keys or invalid keys.
+    Most importantly, it will now warn when a ``usage`` key is passed, as this key is not used.
+    This was also the case before 4.5, but it was silently ignored instead.
+    As a reminder, to set property usage information correctly, you must use
+    :ref:`ProjectSettings.set_as_basic() <class_ProjectSettings_method_set_as_basic>`,
+    :ref:`ProjectSettings.set_restart_if_changed() <class_ProjectSettings_method_set_restart_if_changed>`,
+    or :ref:`ProjectSettings.set_as_internal() <class_ProjectSettings_method_set_as_internal>` instead.
+
 .. note::
 
     In C#, ``StringExtensions.PathJoin`` now avoids adding an extra path separator when the original string is empty,
@@ -220,6 +253,25 @@ Core
     the shortest arc between the two input vectors. Previously, it would return incorrect values for certain inputs
     (`GH-107618`_).
 
+Navigation
+~~~~~~~~~~
+
+.. note::
+
+    By default, the regions in a NavigationServer map now update asynchronously using threads to improve performance.
+    This can cause additional delay in the update due to thread synchronisation.
+    The asynchronous region update can be toggled with the ``navigation/world/region_use_async_iterations`` project setting.
+
+.. note::
+    The merging of navmeshes in the NavigationServer has changed processing order. Regions now merge and cache
+    internal navmeshes first, then the remaining free edges are merged by the navigation map.
+    If a project had navigation map synchronisation errors before, it might now have shifted
+    affected edges, making already existing errors in a layout more noticeable in the pathfinding.
+    The ``navigation/2d_or_3d/merge_rasterizer_cell_scale`` project setting can be set to a lower value
+    to increase the detail of the rasterization grid (with `0.01` being the smallest cell size possible).
+    If edge merge errors still persist with the lowest possible rasterization scale value,
+    the error may be caused by overlap: two navmeshes are stacked on top of each other, causing geometry conflict.
+
 Physics
 ~~~~~~~
 
@@ -241,6 +293,7 @@ Text
     to the same value you were passing as ``size_in_percent``.
 
 .. |❌| replace:: :abbr:`❌ (This API breaks compatibility.)`
+.. |❌ with stub| replace:: :abbr:`❌ (Stub compatibility methods were added to prevent crashes. However, this API is not functional anymore.)`
 .. |✔️| replace:: :abbr:`✔️ (This API does not break compatibility.)`
 .. |✔️ with compat| replace:: :abbr:`✔️ (This API does not break compatibility. A compatibility method was added.)`
 

+ 24 - 23
tutorials/platform/android/android_in_app_purchases.rst

@@ -21,7 +21,7 @@ Initialize the plugin
 
 To use the ``GodotGooglePlayBilling`` API:
 
-1. Access the ``BillingClient`` autoload singleton, it's automatically added when the plugin is enabled.
+1. Access the ``BillingClient``.
 2. Connect to its signals to receive billing results.
 3. Call ``start_connection``.
 
@@ -29,17 +29,19 @@ Initialization example:
 
 ::
 
+    var billing_client: BillingClient
     func _ready():
-        BillingClient.connected.connect(_on_connected) # No params
-        BillingClient.disconnected.connect(_on_disconnected) # No params
-        BillingClient.connect_error.connect(_on_connect_error) # response_code: int, debug_message: String
-        BillingClient.query_product_details_response.connect(_on_query_product_details_response) # response: Dictionary
-        BillingClient.query_purchases_response.connect(_on_query_purchases_response) # response: Dictionary
-        BillingClient.on_purchase_updated.connect(_on_purchase_updated) # response: Dictionary
-        BillingClient.consume_purchase_response.connect(_on_consume_purchase_response) # response: Dictionary
-        BillingClient.acknowledge_purchase_response.connect(_on_acknowledge_purchase_response) # response: Dictionary
-
-        BillingClient.start_connection()
+        billing_client = BillingClient.new()
+        billing_client.connected.connect(_on_connected) # No params
+        billing_client.disconnected.connect(_on_disconnected) # No params
+        billing_client.connect_error.connect(_on_connect_error) # response_code: int, debug_message: String
+        billing_client.query_product_details_response.connect(_on_query_product_details_response) # response: Dictionary
+        billing_client.query_purchases_response.connect(_on_query_purchases_response) # response: Dictionary
+        billing_client.on_purchase_updated.connect(_on_purchase_updated) # response: Dictionary
+        billing_client.consume_purchase_response.connect(_on_consume_purchase_response) # response: Dictionary
+        billing_client.acknowledge_purchase_response.connect(_on_acknowledge_purchase_response) # response: Dictionary
+
+        billing_client.start_connection()
 
 The API must be in a connected state prior to use. The ``connected`` signal is sent
 when the connection process succeeds. You can also use ``is_ready()`` to determine if the plugin
@@ -76,12 +78,12 @@ Example use of ``query_product_details()``:
 ::
 
     func _on_connected():
-      BillingClient.query_product_details(["my_iap_item"], BillingClient.ProductType.INAPP) # BillingClient.ProductType.SUBS for subscriptions.
+      billing_client.query_product_details(["my_iap_item"], BillingClient.ProductType.INAPP) # BillingClient.ProductType.SUBS for subscriptions.
 
     func _on_query_product_details_response(query_result: Dictionary):
         if query_result.response_code == BillingClient.BillingResponseCode.OK:
             print("Product details query success")
-            for available_product in query_result.result_array:
+            for available_product in query_result.product_details:
                 print(available_product)
         else:
             print("Product details query failed")
@@ -105,12 +107,12 @@ Example use of ``query_purchases()``:
 ::
 
     func _query_purchases():
-        BillingClient.query_purchases(BillingClient.ProductType.INAPP) # Or BillingClient.ProductType.SUBS for subscriptions.
+        billing_client.query_purchases(BillingClient.ProductType.INAPP) # Or BillingClient.ProductType.SUBS for subscriptions.
 
     func _on_query_purchases_response(query_result: Dictionary):
         if query_result.response_code == BillingClient.BillingResponseCode.OK:
             print("Purchase query success")
-            for purchase in query_result.result_array:
+            for purchase in query_result.purchases:
                 _process_purchase(purchase)
         else:
             print("Purchase query failed")
@@ -120,9 +122,8 @@ Example use of ``query_purchases()``:
 Purchase an item
 ~~~~~~~~~~~~~~~~
 
-To launch the billing flow for an item:
-- Use ``purchase()`` for in-app products, passing the product ID string.
-- Use ``purchase_subscription()`` for subscriptions, passing the product ID and base plan ID. You may also optionally provide an offer ID.
+To launch the billing flow for an item: Use ``purchase()`` for in-app products, passing the product ID string.
+Use ``purchase_subscription()`` for subscriptions, passing the product ID and base plan ID. You may also optionally provide an offer ID.
 
 For both ``purchase()`` and ``purchase_subscription()``, you can optionally pass a boolean to indicate whether
 offers are `personallised <https://developer.android.com/google/play/billing/integrate#personalized-price>`_
@@ -136,7 +137,7 @@ Example use of ``purchase()``:
 
 ::
 
-    var result = BillingClient.purchase("my_iap_item")
+    var result = billing_client.purchase("my_iap_item")
     if result.response_code == BillingClient.BillingResponseCode.OK:
         print("Billing flow launch success")
     else:
@@ -151,7 +152,7 @@ The result of the purchase will be sent through the ``on_purchases_updated`` sig
     func _on_purchases_updated(result: Dictionary):
         if result.response_code == BillingClient.BillingResponseCode.OK:
             print("Purchase update received")
-            for purchase in result.result_array:
+            for purchase in result.purchases:
                 _process_purchase(purchase)
         else:
             print("Purchase update error")
@@ -229,7 +230,7 @@ Example use of ``consume_purchase()``:
         if "my_consumable_iap_item" in purchase.product_ids and purchase.purchase_state == BillingClient.PurchaseState.PURCHASED:
             # Add code to store payment so we can reconcile the purchase token
             # in the completion callback against the original purchase
-            BillingClient.consume_purchase(purchase.purchase_token)
+            billing_client.consume_purchase(purchase.purchase_token)
 
     func _on_consume_purchase_response(result: Dictionary):
         if result.response_code == BillingClient.BillingResponseCode.OK:
@@ -265,7 +266,7 @@ Example use of ``acknowledge_purchase()``:
                 not purchase.is_acknowledged:
             # Add code to store payment so we can reconcile the purchase token
             # in the completion callback against the original purchase
-            BillingClient.acknowledge_purchase(purchase.purchase_token)
+            billing_client.acknowledge_purchase(purchase.purchase_token)
 
     func _on_acknowledge_purchase_response(result: Dictionary):
         if result.response_code == BillingClient.BillingResponseCode.OK:
@@ -342,6 +343,6 @@ Example use of ``update_subscription``:
 
 ::
 
-    BillingClient.update_subscription(_active_subscription_purchase.purchase_token, \
+    billing_client.update_subscription(_active_subscription_purchase.purchase_token, \
                         BillingClient.ReplacementMode.WITH_TIME_PRORATION, "new_sub_product_id", "base_plan_id")
 

+ 1 - 1
tutorials/scripting/cpp/gdextension_docs_system.rst

@@ -85,7 +85,7 @@ You can set text as bold, italic, underlined, colored, codeblocks etc. by embedd
 
     [b]this text will be shown as bold[/b]
 
-Currently they supported tags for the GDExtension documentation system are:
+Currently, the supported tags for the GDExtension documentation system are:
 
 .. list-table::
   :class: wrap-normal

+ 80 - 0
tutorials/scripting/gdscript/static_typing.rst

@@ -479,6 +479,86 @@ Currently, ``UNSAFE_*`` warnings do not cover all cases that unsafe lines cover.
 Common unsafe operations and their safe counterparts
 ----------------------------------------------------
 
+Global scope methods
+~~~~~~~~~~~~~~~~~~~~
+
+The following global scope methods are not statically typed, but they have
+typed counterparts available. These methods return statically typed values:
+
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| Method                                               | Statically typed equivalents                                                        |
++======================================================+=====================================================================================+
+| :ref:`abs()<class_@GlobalScope_method_abs>`          | | :ref:`absf() <class_@GlobalScope_method_absf>`,                                   |
+|                                                      |   :ref:`absi() <class_@GlobalScope_method_absi>`                                    |
+|                                                      | | :ref:`Vector2.abs() <class_Vector2_method_abs>`,                                  |
+|                                                      |   :ref:`Vector2i.abs() <class_Vector2i_method_abs>`                                 |
+|                                                      | | :ref:`Vector3.abs() <class_Vector3_method_abs>`,                                  |
+|                                                      |   :ref:`Vector3i.abs() <class_Vector3i_method_abs>`                                 |
+|                                                      | | :ref:`Vector4.abs() <class_Vector4_method_abs>`,                                  |
+|                                                      |   :ref:`Vector4i.abs() <class_Vector4i_method_abs>`                                 |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`ceil() <class_@GlobalScope_method_ceil>`       | | :ref:`ceilf() <class_@GlobalScope_method_ceilf>`,                                 |
+|                                                      |   :ref:`ceili() <class_@GlobalScope_method_ceili>`                                  |
+|                                                      | | :ref:`Vector2.ceil() <class_Vector2_method_ceil>`                                 |
+|                                                      | | :ref:`Vector3.ceil() <class_Vector3_method_ceil>`                                 |
+|                                                      | | :ref:`Vector4.ceil() <class_Vector4_method_ceil>`                                 |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`clamp() <class_@GlobalScope_method_clamp>`     | | :ref:`clampf() <class_@GlobalScope_method_clampf>`,                               |
+|                                                      |   :ref:`clampi() <class_@GlobalScope_method_clampi>`                                |
+|                                                      | | :ref:`Vector2.clamp() <class_Vector2_method_clamp>`,                              |
+|                                                      |   :ref:`Vector2i.clamp() <class_Vector2i_method_clamp>`                             |
+|                                                      | | :ref:`Vector3.clamp() <class_Vector3_method_clamp>`,                              |
+|                                                      |   :ref:`Vector3i.clamp() <class_Vector3i_method_clamp>`                             |
+|                                                      | | :ref:`Vector4.clamp() <class_Vector4_method_clamp>`,                              |
+|                                                      |   :ref:`Vector4i.clamp() <class_Vector4i_method_clamp>`                             |
+|                                                      | | :ref:`Color.clamp() <class_Color_method_clamp>`                                   |
+|                                                      | | (untyped ``clamp()`` does not work on Color)                                      |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`floor() <class_@GlobalScope_method_floor>`     | | :ref:`floorf() <class_@GlobalScope_method_floorf>`,                               |
+|                                                      |   :ref:`floori() <class_@GlobalScope_method_floori>`                                |
+|                                                      | | :ref:`Vector2.floor() <class_Vector2_method_floor>`                               |
+|                                                      | | :ref:`Vector3.floor() <class_Vector3_method_floor>`                               |
+|                                                      | | :ref:`Vector4.floor() <class_Vector4_method_floor>`                               |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`lerp() <class_@GlobalScope_method_lerp>`       | | :ref:`lerpf() <class_@GlobalScope_method_lerpf>`                                  |
+|                                                      | | :ref:`Vector2.lerp() <class_Vector2_method_lerp>`                                 |
+|                                                      | | :ref:`Vector3.lerp() <class_Vector3_method_lerp>`                                 |
+|                                                      | | :ref:`Vector4.lerp() <class_Vector4_method_lerp>`                                 |
+|                                                      | | :ref:`Color.lerp() <class_Color_method_lerp>`                                     |
+|                                                      | | :ref:`Quaternion.slerp() <class_Quaternion_method_slerp>`                         |
+|                                                      | | :ref:`Basis.slerp() <class_Basis_method_slerp>`                                   |
+|                                                      | | :ref:`Transform2D.interpolate_with() <class_Transform2D_method_interpolate_with>` |
+|                                                      | | :ref:`Transform3D.interpolate_with() <class_Transform3D_method_interpolate_with>` |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`round() <class_@GlobalScope_method_round>`     | | :ref:`roundf() <class_@GlobalScope_method_roundf>`,                               |
+|                                                      |   :ref:`roundi() <class_@GlobalScope_method_roundi>`                                |
+|                                                      | | :ref:`Vector2.round() <class_Vector2_method_round>`                               |
+|                                                      | | :ref:`Vector3.round() <class_Vector3_method_round>`                               |
+|                                                      | | :ref:`Vector4.round() <class_Vector4_method_round>`                               |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`sign() <class_@GlobalScope_method_sign>`       | | :ref:`signf() <class_@GlobalScope_method_signf>`                                  |
+|                                                      | | :ref:`signi() <class_@GlobalScope_method_signi>`                                  |
+|                                                      | | :ref:`Vector2.sign() <class_Vector2_method_sign>`,                                |
+|                                                      |   :ref:`Vector2i.sign() <class_Vector2i_method_sign>`                               |
+|                                                      | | :ref:`Vector3.sign() <class_Vector3_method_sign>`,                                |
+|                                                      |   :ref:`Vector3i.sign() <class_Vector3i_method_sign>`                               |
+|                                                      | | :ref:`Vector4.sign() <class_Vector4_method_sign>`,                                |
+|                                                      |   :ref:`Vector4i.sign() <class_Vector4i_method_sign>`                               |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`snapped() <class_@GlobalScope_method_snapped>` | | :ref:`snappedf() <class_@GlobalScope_method_snappedf>`                            |
+|                                                      | | :ref:`snappedi() <class_@GlobalScope_method_snappedi>`                            |
+|                                                      | | :ref:`Vector2.snapped() <class_Vector2_method_snapped>`,                          |
+|                                                      |   :ref:`Vector2i.snapped() <class_Vector2i_method_snapped>`                         |
+|                                                      | | :ref:`Vector3.snapped() <class_Vector3_method_snapped>`,                          |
+|                                                      |   :ref:`Vector3i.snapped() <class_Vector3i_method_snapped>`                         |
+|                                                      | | :ref:`Vector4.snapped() <class_Vector4_method_snapped>`,                          |
+|                                                      |   :ref:`Vector4i.snapped() <class_Vector4i_method_snapped>`                         |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+
+When using static typing, use the typed global scope methods whenever possible.
+This ensures you have safe lines and benefit from typed instructions for
+better performance.
+
 ``UNSAFE_PROPERTY_ACCESS`` and ``UNSAFE_METHOD_ACCESS`` warnings
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

+ 4 - 0
tutorials/scripting/logging.rst

@@ -225,6 +225,8 @@ Here is a minimal working example of a custom logger, with the script added as a
         func _log_message(message: String, error: bool) -> void:
             # Do something with `message`.
             # `error` is `true` for messages printed to the standard error stream (stderr) with `print_error()`.
+            # Note that this method will be called from threads other than the main thread, possibly at the same
+            # time, so you will need to have some kind of thread-safety as part of it, like a Mutex.
             pass
 
         func _log_error(
@@ -239,6 +241,8 @@ Here is a minimal working example of a custom logger, with the script added as a
         ) -> void:
             # Do something with the error. The error text is in `rationale`.
             # See the Logger class reference for details on other parameters.
+            # Note that this method will be called from threads other than the main thread, possibly at the same
+            # time, so you will need to have some kind of thread-safety as part of it, like a Mutex.
             pass
 
     # Use `_init()` to initialize the logger as early as possible, which ensures that messages

+ 9 - 5
tutorials/shaders/shader_reference/spatial_shader.rst

@@ -192,7 +192,9 @@ shader, this value can be used as desired.
 +----------------------------------------+--------------------------------------------------------+
 | in vec3 **NODE_POSITION_VIEW**         | Node position, in view space.                          |
 +----------------------------------------+--------------------------------------------------------+
-| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space.                       |
+| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space. Represents the        |
+|                                        | midpoint of the two eyes when in multiview/stereo      |
+|                                        | rendering.                                             |
 +----------------------------------------+--------------------------------------------------------+
 | in vec3 **CAMERA_DIRECTION_WORLD**     | Camera direction, in world space.                      |
 +----------------------------------------+--------------------------------------------------------+
@@ -210,8 +212,8 @@ shader, this value can be used as desired.
 +----------------------------------------+--------------------------------------------------------+
 | in int **VIEW_RIGHT**                  | Constant for right eye, always ``1``.                  |
 +----------------------------------------+--------------------------------------------------------+
-| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered.            |
-|                                        | Only applicable for multiview rendering.               |
+| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered, in view    |
+|                                        | space. Only applicable for multiview rendering.        |
 +----------------------------------------+--------------------------------------------------------+
 | inout vec3 **VERTEX**                  | Position of the vertex, in model space.                |
 |                                        | In world space if ``world_vertex_coords`` is used.     |
@@ -322,7 +324,8 @@ these properties, and if you don't write to them, Godot will optimize away the c
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | in vec3 **NODE_POSITION_VIEW**         | Node position, in view space.                                                                    |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
-| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space.                                                                 |
+| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space. Represents the midpoint of the two eyes when in                 |
+|                                        | multiview/stereo rendering.                                                                      |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | in vec3 **CAMERA_DIRECTION_WORLD**     | Camera direction, in world space.                                                                |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
@@ -343,7 +346,8 @@ these properties, and if you don't write to them, Godot will optimize away the c
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | in int **VIEW_RIGHT**                  | Constant for right eye, always ``1``.                                                            |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
-| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered. Only applicable for multiview rendering.             |
+| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered, in view space. Only applicable for multiview         |
+|                                        | rendering.                                                                                       |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | sampler2D **SCREEN_TEXTURE**           | Removed in Godot 4. Use a ``sampler2D`` with ``hint_screen_texture`` instead.                    |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+

+ 38 - 0
tutorials/shaders/shaders_style_guide.rst

@@ -377,6 +377,44 @@ the console, extra indentation should **not** be added within ``#if``,
         #endif
     }
 
+Applying formatting automatically
+---------------------------------
+
+To automatically format shader files, you can use
+`clang-format <https://clang.llvm.org/docs/ClangFormat.html>`__ on one or several
+``.gdshader`` files, as the syntax is close enough to a C-style language.
+
+However, the default style in clang-format doesn't follow this style guide,
+so you need to save this file as ``.clang-format`` in your project's root folder:
+
+.. code-block:: yaml
+
+    BasedOnStyle: LLVM
+    AlignAfterOpenBracket: DontAlign
+    AlignOperands: DontAlign
+    AlignTrailingComments:
+    Kind: Never
+    OverEmptyLines: 0
+    AllowAllParametersOfDeclarationOnNextLine: false
+    AllowShortFunctionsOnASingleLine: Inline
+    BreakConstructorInitializers: AfterColon
+    ColumnLimit: 0
+    ContinuationIndentWidth: 8
+    IndentCaseLabels: true
+    IndentWidth: 4
+    InsertBraces: true
+    KeepEmptyLinesAtTheStartOfBlocks: false
+    RemoveSemicolon: true
+    SpacesInLineCommentPrefix:
+    Minimum: 0 # We want a minimum of 1 for comments, but allow 0 for disabled code.
+    Maximum: -1
+    TabWidth: 4
+    UseTab: Always
+
+While in the project root, you can then call ``clang-format -i path/to/shader.gdshader``
+in a terminal to format a single shader file, or ``clang-format -i path/to/folder/*.gdshader``
+to format all shaders in a folder.
+
 Code order
 ----------