diff --git a/_tools/redirects/redirects.csv b/_tools/redirects/redirects.csv index 22ac665d15c..14f19a965c9 100644 --- a/_tools/redirects/redirects.csv +++ b/_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 diff --git a/about/complying_with_licenses.rst b/about/complying_with_licenses.rst index 0ce3a63d3b2..6ba70db555f 100644 --- a/about/complying_with_licenses.rst +++ b/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: diff --git a/engine_details/architecture/core_types.rst b/engine_details/architecture/core_types.rst index 57db21df79a..f31d4da67e1 100644 --- a/engine_details/architecture/core_types.rst +++ b/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 `__ | -| | | 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 `__ | | | | 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 `__ | -| | | for faster access. | +| |rb_map| | ``std::map`` | Map type that uses a | +| | | `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 `__ @@ -214,8 +218,8 @@ scripting API. .. |string_name| replace:: `StringName `__ .. |local_vector| replace:: `LocalVector `__ .. |array| replace:: `Array `__ -.. |typed_array| replace:: `TypedArray `__ -.. |packed_array| replace:: `Packed*Array `__ +.. |typed_array| replace:: `TypedArray `__ +.. |packed_array| replace:: `Packed*Array `__ .. |list| replace:: `List `__ .. |fixed_vector| replace:: `FixedVector `__ .. |span| replace:: `Span `__ @@ -224,7 +228,7 @@ scripting API. .. |a_hash_map| replace:: `AHashMap `__ .. |rb_map| replace:: `RBMap `__ .. |dictionary| replace:: `Dictionary `__ -.. |typed_dictionary| replace:: `TypedDictionary `__ +.. |typed_dictionary| replace:: `TypedDictionary `__ .. |pair| replace:: `Pair `__ Math types diff --git a/engine_details/architecture/internal_rendering_architecture.rst b/engine_details/architecture/internal_rendering_architecture.rst index 98968abd98e..64404d5e55d 100644 --- a/engine_details/architecture/internal_rendering_architecture.rst +++ b/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 `__ +`View at full size `__ .. _doc_internal_rendering_architecture_core_shaders: diff --git a/engine_details/development/compiling/compiling_for_ios.rst b/engine_details/development/compiling/compiling_for_ios.rst index 1ad0d877f28..72c64270d6a 100644 --- a/engine_details/development/compiling/compiling_for_ios.rst +++ b/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 `__. + + 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 --- diff --git a/tutorials/editor/default_key_mapping.rst b/tutorials/editor/default_key_mapping.rst index 642373488ee..a9f47990b8f 100644 --- a/tutorials/editor/default_key_mapping.rst +++ b/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 ------------- diff --git a/tutorials/editor/inspector_dock.rst b/tutorials/editor/inspector_dock.rst index b0ee06ddbea..001ac43b7af 100644 --- a/tutorials/editor/inspector_dock.rst +++ b/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` \ No newline at end of file +.. Refer to :ref:`doc_filesystem_dock` diff --git a/tutorials/export/exporting_for_ios.rst b/tutorials/export/exporting_for_ios.rst index 45fbbaca83e..604e454a6e2 100644 --- a/tutorials/export/exporting_for_ios.rst +++ b/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 `__. + + 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. diff --git a/tutorials/migrating/upgrading_to_godot_4.1.rst b/tutorials/migrating/upgrading_to_godot_4.1.rst index 50052147e2f..6487aa04315 100644 --- a/tutorials/migrating/upgrading_to_godot_4.1.rst +++ b/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 diff --git a/tutorials/migrating/upgrading_to_godot_4.3.rst b/tutorials/migrating/upgrading_to_godot_4.3.rst index 31a1419c2c2..a64a43a9594 100644 --- a/tutorials/migrating/upgrading_to_godot_4.3.rst +++ b/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 diff --git a/tutorials/migrating/upgrading_to_godot_4.5.rst b/tutorials/migrating/upgrading_to_godot_4.5.rst index 871d6e6467b..e0c4e962062 100644 --- a/tutorials/migrating/upgrading_to_godot_4.5.rst +++ b/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() ` +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 ` +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 ` +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) ` (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) ` + instead to keep the old behavior. + +.. note:: + + :ref:`ProjectSettings.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() `, + :ref:`ProjectSettings.set_restart_if_changed() `, + or :ref:`ProjectSettings.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.)` diff --git a/tutorials/platform/android/android_in_app_purchases.rst b/tutorials/platform/android/android_in_app_purchases.rst index 632bd6e29ff..dbd434088bf 100644 --- a/tutorials/platform/android/android_in_app_purchases.rst +++ b/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 `_ @@ -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") diff --git a/tutorials/scripting/cpp/gdextension_docs_system.rst b/tutorials/scripting/cpp/gdextension_docs_system.rst index 62864510080..40bf3c683f9 100644 --- a/tutorials/scripting/cpp/gdextension_docs_system.rst +++ b/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 diff --git a/tutorials/scripting/gdscript/static_typing.rst b/tutorials/scripting/gdscript/static_typing.rst index a31ad9d3c9b..d76ca4eb05e 100644 --- a/tutorials/scripting/gdscript/static_typing.rst +++ b/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()` | | :ref:`absf() `, | +| | :ref:`absi() ` | +| | | :ref:`Vector2.abs() `, | +| | :ref:`Vector2i.abs() ` | +| | | :ref:`Vector3.abs() `, | +| | :ref:`Vector3i.abs() ` | +| | | :ref:`Vector4.abs() `, | +| | :ref:`Vector4i.abs() ` | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`ceil() ` | | :ref:`ceilf() `, | +| | :ref:`ceili() ` | +| | | :ref:`Vector2.ceil() ` | +| | | :ref:`Vector3.ceil() ` | +| | | :ref:`Vector4.ceil() ` | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`clamp() ` | | :ref:`clampf() `, | +| | :ref:`clampi() ` | +| | | :ref:`Vector2.clamp() `, | +| | :ref:`Vector2i.clamp() ` | +| | | :ref:`Vector3.clamp() `, | +| | :ref:`Vector3i.clamp() ` | +| | | :ref:`Vector4.clamp() `, | +| | :ref:`Vector4i.clamp() ` | +| | | :ref:`Color.clamp() ` | +| | | (untyped ``clamp()`` does not work on Color) | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`floor() ` | | :ref:`floorf() `, | +| | :ref:`floori() ` | +| | | :ref:`Vector2.floor() ` | +| | | :ref:`Vector3.floor() ` | +| | | :ref:`Vector4.floor() ` | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`lerp() ` | | :ref:`lerpf() ` | +| | | :ref:`Vector2.lerp() ` | +| | | :ref:`Vector3.lerp() ` | +| | | :ref:`Vector4.lerp() ` | +| | | :ref:`Color.lerp() ` | +| | | :ref:`Quaternion.slerp() ` | +| | | :ref:`Basis.slerp() ` | +| | | :ref:`Transform2D.interpolate_with() ` | +| | | :ref:`Transform3D.interpolate_with() ` | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`round() ` | | :ref:`roundf() `, | +| | :ref:`roundi() ` | +| | | :ref:`Vector2.round() ` | +| | | :ref:`Vector3.round() ` | +| | | :ref:`Vector4.round() ` | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`sign() ` | | :ref:`signf() ` | +| | | :ref:`signi() ` | +| | | :ref:`Vector2.sign() `, | +| | :ref:`Vector2i.sign() ` | +| | | :ref:`Vector3.sign() `, | +| | :ref:`Vector3i.sign() ` | +| | | :ref:`Vector4.sign() `, | +| | :ref:`Vector4i.sign() ` | ++------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`snapped() ` | | :ref:`snappedf() ` | +| | | :ref:`snappedi() ` | +| | | :ref:`Vector2.snapped() `, | +| | :ref:`Vector2i.snapped() ` | +| | | :ref:`Vector3.snapped() `, | +| | :ref:`Vector3i.snapped() ` | +| | | :ref:`Vector4.snapped() `, | +| | :ref:`Vector4i.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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tutorials/scripting/logging.rst b/tutorials/scripting/logging.rst index ee6a1ecd3e6..a51cdbaee95 100644 --- a/tutorials/scripting/logging.rst +++ b/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 diff --git a/tutorials/shaders/shader_reference/spatial_shader.rst b/tutorials/shaders/shader_reference/spatial_shader.rst index 53e986ad0ec..b19e05a07bd 100644 --- a/tutorials/shaders/shader_reference/spatial_shader.rst +++ b/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. | +----------------------------------------+--------------------------------------------------------------------------------------------------+ diff --git a/tutorials/shaders/shaders_style_guide.rst b/tutorials/shaders/shaders_style_guide.rst index 108954d76d2..001292b093a 100644 --- a/tutorials/shaders/shaders_style_guide.rst +++ b/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 `__ 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 ----------