From 879931197aeae854ed5ca048b42105d689225107 Mon Sep 17 00:00:00 2001 From: Hana - Piralein <48352564+Piralein@users.noreply.github.com> Date: Thu, 27 Jun 2024 19:35:43 +0200 Subject: [PATCH 001/122] Update outdated annotation and setget syntax Co-Authored-By: PoolloverNathan <24194027+PoolloverNathan@users.noreply.github.com> Co-Authored-By: Solor Vox <1246172+solorvox@users.noreply.github.com> --- tutorials/best_practices/data_preferences.rst | 4 ++-- tutorials/best_practices/logic_preferences.rst | 2 +- tutorials/scripting/gdscript/gdscript_basics.rst | 2 +- tutorials/scripting/gdscript/gdscript_styleguide.rst | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tutorials/best_practices/data_preferences.rst b/tutorials/best_practices/data_preferences.rst index 2595fd7ba72..a5b3b4c33b0 100644 --- a/tutorials/best_practices/data_preferences.rst +++ b/tutorials/best_practices/data_preferences.rst @@ -240,7 +240,7 @@ tree structures. class_name TreeNode var _parent: TreeNode = null - var _children: = [] setget + var _children := [] func _notification(p_what): match p_what: @@ -283,7 +283,7 @@ Enumerations: int vs. string Most languages offer an enumeration type option. GDScript is no different, but unlike most other languages, it allows one to use either integers or strings for -the enum values (the latter only when using the ``export`` keyword in GDScript). +the enum values (the latter only when using the ``@export_enum`` annotation in GDScript). The question then arises, "which should one use?" The short answer is, "whichever you are more comfortable with." This diff --git a/tutorials/best_practices/logic_preferences.rst b/tutorials/best_practices/logic_preferences.rst index 2f61ebcd417..6f5901fd28c 100644 --- a/tutorials/best_practices/logic_preferences.rst +++ b/tutorials/best_practices/logic_preferences.rst @@ -119,7 +119,7 @@ consider: in exceptional cases, one may wish not to do this: 1. If the 'imported' class is liable to change, then it should be a property - instead, initialized either using an ``export`` or a ``load()`` (and + instead, initialized either using an ``@export`` or a ``load()`` (and perhaps not even initialized until later). 2. If the script requires a great many dependencies, and one does not wish diff --git a/tutorials/scripting/gdscript/gdscript_basics.rst b/tutorials/scripting/gdscript/gdscript_basics.rst index 465a5cebae6..99febae9019 100644 --- a/tutorials/scripting/gdscript/gdscript_basics.rst +++ b/tutorials/scripting/gdscript/gdscript_basics.rst @@ -2061,7 +2061,7 @@ Example:: .. note:: - Unlike ``setget`` in previous Godot versions, the properties setter and getter are **always** called (except as noted below), + Unlike ``setget`` in previous Godot versions, ``set`` and ``get`` methods are **always** called (except as noted below), even when accessed inside the same class (with or without prefixing with ``self.``). This makes the behavior consistent. If you need direct access to the value, use another variable for direct access and make the property code use that name. diff --git a/tutorials/scripting/gdscript/gdscript_styleguide.rst b/tutorials/scripting/gdscript/gdscript_styleguide.rst index a3ebacc633e..d377ef87569 100644 --- a/tutorials/scripting/gdscript/gdscript_styleguide.rst +++ b/tutorials/scripting/gdscript/gdscript_styleguide.rst @@ -843,7 +843,7 @@ variables, in that order. .. note:: - The GDScript compiler evaluates onready variables right before the ``_ready`` + GDScript evaluates ``@onready`` variables right before the ``_ready`` callback. You can use that to cache node dependencies, that is to say, to get child nodes in the scene that your class relies on. This is what the example above shows. From cff3dd7178e75ba2e9d9c37eda3a19578b23e4b6 Mon Sep 17 00:00:00 2001 From: Godot Organization Date: Sat, 29 Jun 2024 03:20:27 +0000 Subject: [PATCH 002/122] classref: Sync with current master branch (811ce36) --- classes/class_audioeffectspectrumanalyzer.rst | 2 + ...ss_audioeffectspectrumanalyzerinstance.rst | 26 +++++++-- classes/class_audiostreamwav.rst | 4 +- classes/class_editorsettings.rst | 58 ++++++++++++++----- classes/class_editorundoredomanager.rst | 16 +++++ classes/class_hashingcontext.rst | 10 ++-- classes/class_inputevent.rst | 4 +- classes/class_inputeventkey.rst | 4 +- classes/class_physicalbone3d.rst | 2 + classes/class_projectsettings.rst | 18 +++++- classes/class_resourceimporterwav.rst | 4 +- classes/class_resourceloader.rst | 4 +- classes/class_skeleton3d.rst | 4 ++ classes/class_textedit.rst | 57 ++++++++++++++++++ classes/class_textserver.rst | 5 +- classes/class_webxrinterface.rst | 18 ++++-- 16 files changed, 194 insertions(+), 42 deletions(-) diff --git a/classes/class_audioeffectspectrumanalyzer.rst b/classes/class_audioeffectspectrumanalyzer.rst index c2f812bfd36..2a862c5c0f3 100644 --- a/classes/class_audioeffectspectrumanalyzer.rst +++ b/classes/class_audioeffectspectrumanalyzer.rst @@ -21,6 +21,8 @@ Description This audio effect does not affect sound output, but can be used for real-time audio visualizations. +This resource configures an :ref:`AudioEffectSpectrumAnalyzerInstance`, which performs the actual analysis at runtime. An instance can be acquired with :ref:`AudioServer.get_bus_effect_instance`. + See also :ref:`AudioStreamGenerator` for procedurally generating sounds. .. rst-class:: classref-introduction-group diff --git a/classes/class_audioeffectspectrumanalyzerinstance.rst b/classes/class_audioeffectspectrumanalyzerinstance.rst index bd15e48e710..68c533dcf73 100644 --- a/classes/class_audioeffectspectrumanalyzerinstance.rst +++ b/classes/class_audioeffectspectrumanalyzerinstance.rst @@ -12,9 +12,23 @@ AudioEffectSpectrumAnalyzerInstance **Inherits:** :ref:`AudioEffectInstance` **<** :ref:`RefCounted` **<** :ref:`Object` -.. container:: contribute +Queryable instance of an :ref:`AudioEffectSpectrumAnalyzer`. - There is currently no description for this class. Please help us by :ref:`contributing one `! +.. rst-class:: classref-introduction-group + +Description +----------- + +The runtime part of an :ref:`AudioEffectSpectrumAnalyzer`, which can be used to query the magnitude of a frequency range on its host bus. + +An instance of this class can be acquired with :ref:`AudioServer.get_bus_effect_instance`. + +.. rst-class:: classref-introduction-group + +Tutorials +--------- + +- `Audio Spectrum Visualizer Demo `__ .. rst-class:: classref-reftable-group @@ -49,7 +63,7 @@ enum **MagnitudeMode**: :ref:`πŸ”—` **MAGNITUDE_AVERAGE** = ``0`` -Use the average value as magnitude. +Use the average value across the frequency range as magnitude. .. _class_AudioEffectSpectrumAnalyzerInstance_constant_MAGNITUDE_MAX: @@ -57,7 +71,7 @@ Use the average value as magnitude. :ref:`MagnitudeMode` **MAGNITUDE_MAX** = ``1`` -Use the maximum value as magnitude. +Use the maximum value of the frequency range as magnitude. .. rst-class:: classref-section-separator @@ -74,9 +88,9 @@ Method Descriptions :ref:`Vector2` **get_magnitude_for_frequency_range**\ (\ from_hz\: :ref:`float`, to_hz\: :ref:`float`, mode\: :ref:`MagnitudeMode` = 1\ ) |const| :ref:`πŸ”—` -.. container:: contribute +Returns the magnitude of the frequencies from ``from_hz`` to ``to_hz`` in linear energy as a Vector2. The ``x`` component of the return value represents the left stereo channel, and ``y`` represents the right channel. - There is currently no description for this method. Please help us by :ref:`contributing one `! +\ ``mode`` determines how the frequency range will be processed. See :ref:`MagnitudeMode`. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_audiostreamwav.rst b/classes/class_audiostreamwav.rst index 733b5fff25a..fb21bcccfb9 100644 --- a/classes/class_audiostreamwav.rst +++ b/classes/class_audiostreamwav.rst @@ -213,7 +213,7 @@ Audio format. See :ref:`Format` constants for values - |void| **set_loop_begin**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_loop_begin**\ (\ ) -The loop start point (in number of samples, relative to the beginning of the sample). This information will be imported automatically from the WAV file if present. +The loop start point (in number of samples, relative to the beginning of the stream). This information will be imported automatically from the WAV file if present. .. rst-class:: classref-item-separator @@ -230,7 +230,7 @@ The loop start point (in number of samples, relative to the beginning of the sam - |void| **set_loop_end**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_loop_end**\ (\ ) -The loop end point (in number of samples, relative to the beginning of the sample). This information will be imported automatically from the WAV file if present. +The loop end point (in number of samples, relative to the beginning of the stream). This information will be imported automatically from the WAV file if present. .. rst-class:: classref-item-separator diff --git a/classes/class_editorsettings.rst b/classes/class_editorsettings.rst index 620979d2e10..87720457f7b 100644 --- a/classes/class_editorsettings.rst +++ b/classes/class_editorsettings.rst @@ -321,8 +321,6 @@ Properties +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`float` | :ref:`interface/editor/custom_display_scale` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - | :ref:`bool` | :ref:`interface/editor/debug/enable_pseudolocalization` | - +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`interface/editor/display_scale` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`interface/editor/dock_tab_style` | @@ -569,6 +567,8 @@ Properties +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`text_editor/behavior/indent/type` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`String` | :ref:`text_editor/behavior/navigation/custom_word_separators` | + +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`text_editor/behavior/navigation/drag_and_drop_selection` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`text_editor/behavior/navigation/move_caret_on_right_click` | @@ -581,6 +581,10 @@ Properties +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`text_editor/behavior/navigation/stay_in_script_editor_on_node_selected` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`text_editor/behavior/navigation/use_custom_word_separators` | + +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`text_editor/behavior/navigation/use_default_word_separators` | + +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`text_editor/behavior/navigation/v_scroll_speed` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`text_editor/completion/add_node_path_literals` | @@ -2451,20 +2455,6 @@ The custom editor scale factor to use. This can be used for displays with very h ---- -.. _class_EditorSettings_property_interface/editor/debug/enable_pseudolocalization: - -.. rst-class:: classref-property - -:ref:`bool` **interface/editor/debug/enable_pseudolocalization** :ref:`πŸ”—` - -If ``true``, lengthens the editor's localizable strings and replaces their characters with accented variants. This allows spotting non-localizable strings easily, while also ensuring the UI layout doesn't break when strings are made longer (as many languages require strings to be longer). - -This is a debugging feature and should only be enabled when working on the editor itself. - -.. rst-class:: classref-item-separator - ----- - .. _class_EditorSettings_property_interface/editor/display_scale: .. rst-class:: classref-property @@ -4045,6 +4035,18 @@ The indentation style to use (tabs or spaces). ---- +.. _class_EditorSettings_property_text_editor/behavior/navigation/custom_word_separators: + +.. rst-class:: classref-property + +:ref:`String` **text_editor/behavior/navigation/custom_word_separators** :ref:`πŸ”—` + +The characters to consider as word delimiters if :ref:`text_editor/behavior/navigation/use_custom_word_separators` is ``true``. The characters should be defined without separation, for example ``#_!``. + +.. rst-class:: classref-item-separator + +---- + .. _class_EditorSettings_property_text_editor/behavior/navigation/drag_and_drop_selection: .. rst-class:: classref-property @@ -4119,6 +4121,30 @@ If ``true``, prevents automatically switching between the Script and 2D/3D scree ---- +.. _class_EditorSettings_property_text_editor/behavior/navigation/use_custom_word_separators: + +.. rst-class:: classref-property + +:ref:`bool` **text_editor/behavior/navigation/use_custom_word_separators** :ref:`πŸ”—` + +If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` or :kbd:`Cmd + Right` on macOS) bindings will use the behavior of :ref:`text_editor/behavior/navigation/use_default_word_separators`. If ``true``, it will also stop the caret if a character within :ref:`text_editor/behavior/navigation/custom_word_separators` is detected. Useful for subword moving. This behavior also will be applied to the behavior of text selection. + +.. rst-class:: classref-item-separator + +---- + +.. _class_EditorSettings_property_text_editor/behavior/navigation/use_default_word_separators: + +.. rst-class:: classref-property + +:ref:`bool` **text_editor/behavior/navigation/use_default_word_separators** :ref:`πŸ”—` + +If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` or :kbd:`Cmd + Right` on macOS) bindings will stop moving caret only if a space or punctuation is detected. If ``true``, it will also stop the caret if a character is part of ```!"#$%&'()*+,-./:;<=>?@[\]^`{|}~``, the Unicode General Punctuation table, or the Unicode CJK Punctuation table. Useful for subword moving. This behavior also will be applied to the behavior of text selection. + +.. rst-class:: classref-item-separator + +---- + .. _class_EditorSettings_property_text_editor/behavior/navigation/v_scroll_speed: .. rst-class:: classref-property diff --git a/classes/class_editorundoredomanager.rst b/classes/class_editorundoredomanager.rst index a45eb3e1398..19b1042bf1e 100644 --- a/classes/class_editorundoredomanager.rst +++ b/classes/class_editorundoredomanager.rst @@ -60,6 +60,8 @@ Methods +---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`create_action`\ (\ name\: :ref:`String`, merge_mode\: :ref:`MergeMode` = 0, custom_context\: :ref:`Object` = null, backward_undo_ops\: :ref:`bool` = false\ ) | +---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | |void| | :ref:`force_fixed_history`\ (\ ) | + +---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`UndoRedo` | :ref:`get_history_undo_redo`\ (\ id\: :ref:`int`\ ) |const| | +---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_object_history_id`\ (\ object\: :ref:`Object`\ ) |const| | @@ -254,6 +256,20 @@ The way undo operation are ordered in actions is dictated by ``backward_undo_ops ---- +.. _class_EditorUndoRedoManager_method_force_fixed_history: + +.. rst-class:: classref-method + +|void| **force_fixed_history**\ (\ ) :ref:`πŸ”—` + +Forces the next operation (e.g. :ref:`add_do_method`) to use the action's history rather than guessing it from the object. This is sometimes needed when a history can't be correctly determined, like for a nested resource that doesn't have a path yet. + +This method should only be used when absolutely necessary, otherwise it might cause invalid history state. For most of complex cases, the ``custom_context`` parameter of :ref:`create_action` is sufficient. + +.. rst-class:: classref-item-separator + +---- + .. _class_EditorUndoRedoManager_method_get_history_undo_redo: .. rst-class:: classref-method diff --git a/classes/class_hashingcontext.rst b/classes/class_hashingcontext.rst index bf5d5b98ac5..40232dc8460 100644 --- a/classes/class_hashingcontext.rst +++ b/classes/class_hashingcontext.rst @@ -40,8 +40,9 @@ The :ref:`HashType` enum shows the supported hashi # Open the file to hash. var file = FileAccess.open(path, FileAccess.READ) # Update the context after reading each chunk. - while not file.eof_reached(): - ctx.update(file.get_buffer(CHUNK_SIZE)) + while file.get_position() < file.get_length(): + var remaining = file.get_length() - file.get_position() + ctx.update(file.get_buffer(min(remaining, CHUNK_SIZE))) # Get the computed hash. var res = ctx.finish() # Print the result as hex string and array. @@ -64,9 +65,10 @@ The :ref:`HashType` enum shows the supported hashi // Open the file to hash. using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read); // Update the context after reading each chunk. - while (!file.EofReached()) + while (file.GetPosition() < file.GetLength()) { - ctx.Update(file.GetBuffer(ChunkSize)); + int remaining = (int)(file.GetLength() - file.GetPosition()); + ctx.Update(file.GetBuffer(Mathf.Min(remaining, ChunkSize))); } // Get the computed hash. byte[] res = ctx.Finish(); diff --git a/classes/class_inputevent.rst b/classes/class_inputevent.rst index 9084aecf512..a10d7c967d5 100644 --- a/classes/class_inputevent.rst +++ b/classes/class_inputevent.rst @@ -248,7 +248,9 @@ Returns ``true`` if this input event has been canceled. :ref:`bool` **is_echo**\ (\ ) |const| :ref:`πŸ”—` -Returns ``true`` if this input event is an echo event (only for events of type :ref:`InputEventKey`). Any other event type returns ``false``. +Returns ``true`` if this input event is an echo event (only for events of type :ref:`InputEventKey`). An echo event is a repeated key event sent when the user is holding down the key. Any other event type returns ``false``. + +\ **Note:** The rate at which echo events are sent is typically around 20 events per second (after holding down the key for roughly half a second). However, the key repeat delay/speed can be changed by the user or disabled entirely in the operating system settings. To ensure your project works correctly on all configurations, do not assume the user has a specific key repeat configuration in your project's behavior. .. rst-class:: classref-item-separator diff --git a/classes/class_inputeventkey.rst b/classes/class_inputeventkey.rst index b889662fb89..78f83f59bb4 100644 --- a/classes/class_inputeventkey.rst +++ b/classes/class_inputeventkey.rst @@ -100,7 +100,9 @@ Property Descriptions - |void| **set_echo**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_echo**\ (\ ) -If ``true``, the key was already pressed before this event. It means the user is holding the key down. +If ``true``, the key was already pressed before this event. An echo event is a repeated key event sent when the user is holding down the key. + +\ **Note:** The rate at which echo events are sent is typically around 20 events per second (after holding down the key for roughly half a second). However, the key repeat delay/speed can be changed by the user or disabled entirely in the operating system settings. To ensure your project works correctly on all configurations, do not assume the user has a specific key repeat configuration in your project's behavior. .. rst-class:: classref-item-separator diff --git a/classes/class_physicalbone3d.rst b/classes/class_physicalbone3d.rst index c830b8a7952..2325c9a540b 100644 --- a/classes/class_physicalbone3d.rst +++ b/classes/class_physicalbone3d.rst @@ -24,6 +24,8 @@ Description The **PhysicalBone3D** node is a physics body that can be used to make bones in a :ref:`Skeleton3D` react to physics. +\ **Note:** In order to detect physical bones with raycasts, the :ref:`SkeletonModifier3D.active` property of the parent :ref:`PhysicalBoneSimulator3D` must be ``true`` and the :ref:`Skeleton3D`'s bone must be assigned to **PhysicalBone3D** correctly; it means that :ref:`get_bone_id` should return a valid id (``>= 0``). + .. rst-class:: classref-reftable-group Properties diff --git a/classes/class_projectsettings.rst b/classes/class_projectsettings.rst index 2c171e352b7..0fbdc6a155a 100644 --- a/classes/class_projectsettings.rst +++ b/classes/class_projectsettings.rst @@ -177,6 +177,8 @@ Properties +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/gdscript/warnings/assert_always_true` | ``1`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`int` | :ref:`debug/gdscript/warnings/confusable_capture_reassignment` | ``1`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/gdscript/warnings/confusable_identifier` | ``1`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/gdscript/warnings/confusable_local_declaration` | ``1`` | @@ -1820,6 +1822,8 @@ This user directory is used for storing persistent data (``user://`` filesystem) The :ref:`application/config/use_custom_user_dir` setting must be enabled for this to take effect. +\ **Note:** If :ref:`application/config/custom_user_dir_name` contains trailing periods, they will be stripped as folder names ending with a period are not allowed on Windows. + .. rst-class:: classref-item-separator ---- @@ -2080,7 +2084,7 @@ This setting can be overridden using the ``--frame-delay `` command line ar :ref:`bool` **application/run/low_processor_mode** = ``false`` :ref:`πŸ”—` -If ``true``, enables low-processor usage mode. The screen is not redrawn if nothing changes visually. This is meant for writing applications and editors, but is pretty useless (and can hurt performance) in most games. +If ``true``, enables low-processor usage mode. When enabled, the engine takes longer to redraw, but only redraws the screen if necessary. This may lower power consumption, and is intended for editors or mobile applications. For most games, because the screen needs to be redrawn every frame, it is recommended to keep this setting disabled. .. rst-class:: classref-item-separator @@ -2566,6 +2570,18 @@ When set to ``warn`` or ``error``, produces a warning or an error respectively w ---- +.. _class_ProjectSettings_property_debug/gdscript/warnings/confusable_capture_reassignment: + +.. rst-class:: classref-property + +:ref:`int` **debug/gdscript/warnings/confusable_capture_reassignment** = ``1`` :ref:`πŸ”—` + +When set to ``warn`` or ``error``, produces a warning or an error respectively when a local variable captured by a lambda is reassigned, since this does not modify the outer local variable. + +.. rst-class:: classref-item-separator + +---- + .. _class_ProjectSettings_property_debug/gdscript/warnings/confusable_identifier: .. rst-class:: classref-property diff --git a/classes/class_resourceimporterwav.rst b/classes/class_resourceimporterwav.rst index 1c71c45d83d..6cbf8292c99 100644 --- a/classes/class_resourceimporterwav.rst +++ b/classes/class_resourceimporterwav.rst @@ -91,7 +91,7 @@ The compression mode to use on import. :ref:`int` **edit/loop_begin** = ``0`` :ref:`πŸ”—` -The begin loop point to use when :ref:`edit/loop_mode` is **Forward**, **Ping-Pong** or **Backward**. This is set in seconds after the beginning of the audio file. +The begin loop point to use when :ref:`edit/loop_mode` is **Forward**, **Ping-Pong**, or **Backward**. This is set in samples after the beginning of the audio file. .. rst-class:: classref-item-separator @@ -103,7 +103,7 @@ The begin loop point to use when :ref:`edit/loop_mode` **edit/loop_end** = ``-1`` :ref:`πŸ”—` -The end loop point to use when :ref:`edit/loop_mode` is **Forward**, **Ping-Pong** or **Backward**. This is set in seconds after the beginning of the audio file. A value of ``-1`` uses the end of the audio file as the end loop point. +The end loop point to use when :ref:`edit/loop_mode` is **Forward**, **Ping-Pong**, or **Backward**. This is set in samples after the beginning of the audio file. A value of ``-1`` uses the end of the audio file as the end loop point. .. rst-class:: classref-item-separator diff --git a/classes/class_resourceloader.rst b/classes/class_resourceloader.rst index 46543e6f4ca..845ce3d19e0 100644 --- a/classes/class_resourceloader.rst +++ b/classes/class_resourceloader.rst @@ -294,7 +294,7 @@ GDScript has a simplified :ref:`@GDScript.load` bui Returns the resource loaded by :ref:`load_threaded_request`. -If this is called before the loading thread is done (i.e. :ref:`load_threaded_get_status` is not :ref:`THREAD_LOAD_LOADED`), the calling thread will be blocked until the resource has finished loading. +If this is called before the loading thread is done (i.e. :ref:`load_threaded_get_status` is not :ref:`THREAD_LOAD_LOADED`), the calling thread will be blocked until the resource has finished loading. However, it's recommended to use :ref:`load_threaded_get_status` to known when the load has actually completed. .. rst-class:: classref-item-separator @@ -310,6 +310,8 @@ Returns the status of a threaded loading operation started with :ref:`load_threa An array variable can optionally be passed via ``progress``, and will return a one-element array containing the percentage of completion of the threaded loading. +\ **Note:** The recommended way of using this method is to call it during different frames (e.g., in :ref:`Node._process`, instead of a loop). + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_skeleton3d.rst b/classes/class_skeleton3d.rst index 9616f8efb98..841f6b1af75 100644 --- a/classes/class_skeleton3d.rst +++ b/classes/class_skeleton3d.rst @@ -776,6 +776,10 @@ Sets all bone poses to rests. **Deprecated:** This method may be changed or removed in future versions. +This method exists for compatibility with old structures in which the **Skeleton3D** does not have a :ref:`PhysicalBoneSimulator3D` as a child, but directly has :ref:`PhysicalBone3D`\ s as children. + +In case you need to raycast to it without running :ref:`physical_bones_start_simulation`, call this method with ``enabled == true``. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_textedit.rst b/classes/class_textedit.rst index a5913b3b3b0..f71171de46c 100644 --- a/classes/class_textedit.rst +++ b/classes/class_textedit.rst @@ -59,6 +59,8 @@ Properties +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`context_menu_enabled` | ``true`` | +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ + | :ref:`String` | :ref:`custom_word_separators` | ``""`` | + +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`deselect_on_focus_loss_enabled` | ``true`` | +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`drag_and_drop_selection_enabled` | ``true`` | @@ -117,6 +119,10 @@ Properties +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ | :ref:`TextDirection` | :ref:`text_direction` | ``0`` | +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_custom_word_separators` | ``false`` | + +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_default_word_separators` | ``true`` | + +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`virtual_keyboard_enabled` | ``true`` | +-------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ | :ref:`LineWrappingMode` | :ref:`wrap_mode` | ``0`` | @@ -1234,6 +1240,23 @@ If ``true``, a right-click displays the context menu. ---- +.. _class_TextEdit_property_custom_word_separators: + +.. rst-class:: classref-property + +:ref:`String` **custom_word_separators** = ``""`` :ref:`πŸ”—` + +.. rst-class:: classref-property-setget + +- |void| **set_custom_word_separators**\ (\ value\: :ref:`String`\ ) +- :ref:`String` **get_custom_word_separators**\ (\ ) + +The characters to consider as word delimiters if :ref:`use_custom_word_separators` is ``true``. The characters should be defined without separation, for example ``#_!``. + +.. rst-class:: classref-item-separator + +---- + .. _class_TextEdit_property_deselect_on_focus_loss_enabled: .. rst-class:: classref-property @@ -1697,6 +1720,40 @@ Base text writing direction. ---- +.. _class_TextEdit_property_use_custom_word_separators: + +.. rst-class:: classref-property + +:ref:`bool` **use_custom_word_separators** = ``false`` :ref:`πŸ”—` + +.. rst-class:: classref-property-setget + +- |void| **set_use_custom_word_separators**\ (\ value\: :ref:`bool`\ ) +- :ref:`bool` **is_custom_word_separators_enabled**\ (\ ) + +If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` or :kbd:`Cmd + Right` on macOS) bindings will use the behavior of :ref:`use_default_word_separators`. If ``true``, it will also stop the caret if a character within :ref:`custom_word_separators` is detected. Useful for subword moving. This behavior also will be applied to the behavior of text selection. + +.. rst-class:: classref-item-separator + +---- + +.. _class_TextEdit_property_use_default_word_separators: + +.. rst-class:: classref-property + +:ref:`bool` **use_default_word_separators** = ``true`` :ref:`πŸ”—` + +.. rst-class:: classref-property-setget + +- |void| **set_use_default_word_separators**\ (\ value\: :ref:`bool`\ ) +- :ref:`bool` **is_default_word_separators_enabled**\ (\ ) + +If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` or :kbd:`Cmd + Right` on macOS) bindings will stop moving caret only if a space or punctuation is detected. If ``true``, it will also stop the caret if a character is part of ``!"#$%&'()*+,-./:;<=>?@[\]^`{|}~``, the Unicode General Punctuation table, or the Unicode CJK Punctuation table. Useful for subword moving. This behavior also will be applied to the behavior of text selection. + +.. rst-class:: classref-item-separator + +---- + .. _class_TextEdit_property_virtual_keyboard_enabled: .. rst-class:: classref-property diff --git a/classes/class_textserver.rst b/classes/class_textserver.rst index 5c820c8c863..655d54c9d71 100644 --- a/classes/class_textserver.rst +++ b/classes/class_textserver.rst @@ -4164,8 +4164,9 @@ When ``chars_per_line`` is greater than zero, line break boundaries are returned :: var ts = TextServerManager.get_primary_interface() - print(ts.string_get_word_breaks("Godot Engine")) # Prints [0, 5, 6, 12] - print(ts.string_get_word_breaks("Godot Engine", "en", 5)) # Prints [0, 5, 6, 11, 11, 12] + print(ts.string_get_word_breaks("The Godot Engine, 4")) # Prints [0, 3, 4, 9, 10, 16, 18, 19], which corresponds to the following substrings: "The", "Godot", "Engine", "4" + print(ts.string_get_word_breaks("The Godot Engine, 4", "en", 5)) # Prints [0, 3, 4, 9, 10, 15, 15, 19], which corresponds to the following substrings: "The", "Godot", "Engin", "e, 4" + print(ts.string_get_word_breaks("The Godot Engine, 4", "en", 10)) # Prints [0, 9, 10, 19], which corresponds to the following substrings: "The Godot", "Engine, 4" .. rst-class:: classref-item-separator diff --git a/classes/class_webxrinterface.rst b/classes/class_webxrinterface.rst index e99fd78f484..de4deb8f978 100644 --- a/classes/class_webxrinterface.rst +++ b/classes/class_webxrinterface.rst @@ -75,9 +75,10 @@ Here's the minimum code required to start an immersive VR session: # supported. webxr_interface.requested_reference_space_types = 'bounded-floor, local-floor, local' # In order to use 'local-floor' or 'bounded-floor' we must also - # mark the features as required or optional. + # mark the features as required or optional. By including 'hand-tracking' + # as an optional feature, it will be enabled if supported. webxr_interface.required_features = 'local-floor' - webxr_interface.optional_features = 'bounded-floor' + webxr_interface.optional_features = 'bounded-floor, hand-tracking' # This will return false if we're unable to even request the session, # however, it can still fail asynchronously later in the process, so we @@ -94,7 +95,10 @@ Here's the minimum code required to start an immersive VR session: # This will be the reference space type you ultimately got, out of the # types that you requested above. This is useful if you want the game to # work a little differently in 'bounded-floor' versus 'local-floor'. - print ("Reference space type: " + webxr_interface.reference_space_type) + print("Reference space type: ", webxr_interface.reference_space_type) + # This will be the list of features that were successfully enabled + # (except on browsers that don't support this property). + print("Enabled features: ", webxr_interface.enabled_features) func _webxr_session_ended(): $Button.visible = true @@ -419,7 +423,9 @@ Property Descriptions A comma-separated list of features that were successfully enabled by :ref:`XRInterface.initialize` when setting up the WebXR session. -This may include features requested by setting :ref:`required_features` and :ref:`optional_features`. +This may include features requested by setting :ref:`required_features` and :ref:`optional_features`, and will only be available after :ref:`session_started` has been emitted. + +\ **Note:** This may not be support by all web browsers, in which case it will be an empty string. .. rst-class:: classref-item-separator @@ -442,7 +448,7 @@ If a user's browser or device doesn't support one of the given features, initial This doesn't have any effect on the interface when already initialized. -Possible values come from `WebXR's XRReferenceSpaceType `__. If you want to use a particular reference space type, it must be listed in either :ref:`required_features` or :ref:`optional_features`. +Possible values come from `WebXR's XRReferenceSpaceType `__, or include other features like ``"hand-tracking"`` to enable hand tracking. .. rst-class:: classref-item-separator @@ -506,7 +512,7 @@ If a user's browser or device doesn't support one of the given features, initial This doesn't have any effect on the interface when already initialized. -Possible values come from `WebXR's XRReferenceSpaceType `__. If you want to use a particular reference space type, it must be listed in either :ref:`required_features` or :ref:`optional_features`. +Possible values come from `WebXR's XRReferenceSpaceType `__, or include other features like ``"hand-tracking"`` to enable hand tracking. .. rst-class:: classref-item-separator From 1c56d75a68d432729e1d50dc381151b6325afbda Mon Sep 17 00:00:00 2001 From: Danil Alexeev Date: Fri, 28 Jun 2024 20:47:54 +0300 Subject: [PATCH 003/122] GDScript: Update lambda documentation --- .../scripting/gdscript/gdscript_basics.rst | 92 ++++++++++++++----- 1 file changed, 69 insertions(+), 23 deletions(-) diff --git a/tutorials/scripting/gdscript/gdscript_basics.rst b/tutorials/scripting/gdscript/gdscript_basics.rst index 99febae9019..df153855491 100644 --- a/tutorials/scripting/gdscript/gdscript_basics.rst +++ b/tutorials/scripting/gdscript/gdscript_basics.rst @@ -1034,11 +1034,14 @@ Member variables are initialized in the following order: (``0`` for ``int``, ``false`` for ``bool``, etc.). 2. The specified values are assigned in the order of the variables in the script, from top to bottom. - - *(Only for ``Node``-derived classes)* If the ``@onready`` annotation is applied to a variable, its initialization is deferred to step 5. + + - (Only for ``Node``-derived classes) If the ``@onready`` annotation is applied to a variable, + its initialization is deferred to step 5. + 3. If defined, the ``_init()`` method is called. 4. When instantiating scenes and resources, the exported values are assigned. -5. *(Only for ``Node``-derived classes)* ``@onready`` variables are initialized. -6. *(Only for ``Node``-derived classes)* If defined, the ``_ready()`` method is called. +5. (Only for ``Node``-derived classes) ``@onready`` variables are initialized. +6. (Only for ``Node``-derived classes) If defined, the ``_ready()`` method is called. .. warning:: @@ -1350,8 +1353,8 @@ return early with the ``return`` keyword, but they can't return any value. Referencing functions ^^^^^^^^^^^^^^^^^^^^^ -Functions are first-class items in terms of the :ref:`Callable ` object. Referencing a -function by name without calling it will automatically generate the proper +Functions are first-class values in terms of the :ref:`Callable ` object. +Referencing a function by name without calling it will automatically generate the proper callable. This can be used to pass functions as arguments. :: @@ -1368,43 +1371,86 @@ callable. This can be used to pass functions as arguments. func _ready() -> void: var my_array = [1, 2, 3] var plus_one = map(my_array, add1) - print(plus_one) # Prints [2, 3, 4]. + print(plus_one) # Prints `[2, 3, 4]`. + +.. note:: -.. note:: Callables **must** be called with the ``call`` method. You cannot use - the ``()`` operator directly. This behavior is implemented to avoid - performance issues on direct function calls. + Callables **must** be called with the :ref:`call() ` method. + You cannot use the ``()`` operator directly. This behavior is implemented to avoid + performance issues on direct function calls. Lambda functions ^^^^^^^^^^^^^^^^ -Lambda functions allow you to declare functions that do not belong to a class. Instead a :ref:`Callable ` object is created and assigned to a variable directly. -This can be useful to create Callables to pass around without polluting the class scope. +Lambda functions allow you to declare functions that do not belong to a class. Instead, a +:ref:`Callable ` object is created and assigned to a variable directly. +This can be useful to create callables to pass around without polluting the class scope. :: - var lambda = func(x): print(x) - lambda.call(42) # Prints "42" + var lambda = func (x): + print(x) + +To call the created lambda you can use the :ref:`call() ` method:: -Lambda functions can be named for debugging purposes:: + lambda.call(42) # Prints `42`. + +Lambda functions can be named for debugging purposes (the name is displayed in the Debugger):: var lambda = func my_lambda(x): print(x) -Note that if you want to return a value from a lambda, an explicit ``return`` +You can specify type hints for lambda functions in the same way as for regular ones:: + + var lambda := func (x: int) -> void: + print(x) + +Note that if you want to return a value from a lambda function, an explicit ``return`` is required (you can't omit ``return``):: - var lambda = func(x): return x ** 2 + var lambda = func (x): return x ** 2 print(lambda.call(2)) # Prints `4`. -Lambda functions capture the local environment. Local variables are passed by value, so they won't be updated in the lambda if changed in the local function:: +Lambda functions capture the local environment:: var x = 42 - var my_lambda = func(): print(x) - my_lambda.call() # Prints "42" - x = "Hello" - my_lambda.call() # Prints "42" + var lambda = func (): + print(x) # Prints `42`. + lambda.call() + +.. warning:: -.. note:: The values of the outer scope behave like constants. Therefore, if you declare an array or dictionary, it can still be modified afterwards. + Local variables are captured by value once, when the lambda is created. + So they won't be updated in the lambda if reassigned in the outer function:: + + var x = 42 + var lambda = func (): print(x) + lambda.call() # Prints `42`. + x = "Hello" + lambda.call() # Prints `42`. + + Also, a lambda cannot reassign an outer local variable. After exiting the lambda, + the variable will be unchanged, because the lambda capture implicitly shadows it:: + + var x = 42 + var lambda = func (): + print(x) # Prints `42`. + x = "Hello" # Produces the `CONFUSABLE_CAPTURE_REASSIGNMENT` warning. + print(x) # Prints `Hello`. + lambda.call() + print(x) # Prints `42`. + + However, if you use pass-by-reference data types (arrays, dictionaries, and objects), + then the content changes are shared until you reassign the variable:: + + var a = [] + var lambda = func (): + a.append(1) + print(a) # Prints `[1]`. + a = [2] # Produces the `CONFUSABLE_CAPTURE_REASSIGNMENT` warning. + print(a) # Prints `[2]`. + lambda.call() + print(a) # Prints `[1]`. Static functions ^^^^^^^^^^^^^^^^ @@ -1415,7 +1461,7 @@ A static function has access to static variables. Also static functions are usef static func sum2(a, b): return a + b -Lambdas cannot be declared static. +Lambda functions cannot be declared static. See also `Static variables`_ and `Static constructor`_. From 413139646a3d84afd77395dbe65810521f8de395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20Ib=C3=A1=C3=B1ez=20S=C3=A1nchez?= Date: Fri, 28 Jun 2024 10:06:00 +0200 Subject: [PATCH 004/122] Remove unnecessary opinion about languages. --- tutorials/i18n/internationalizing_games.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tutorials/i18n/internationalizing_games.rst b/tutorials/i18n/internationalizing_games.rst index 24518a05324..18cc299cdc3 100644 --- a/tutorials/i18n/internationalizing_games.rst +++ b/tutorials/i18n/internationalizing_games.rst @@ -6,9 +6,7 @@ Internationalizing games Introduction ------------ -SerΓ­a excelente que el mundo hablara solo un idioma (It would be great if the -world spoke only one language). Unfortunately for -us developers, that is not the case. While indie or niche games usually +While indie or niche games usually do not need localization, games targeting a more massive market often require localization. Godot offers many tools to make this process more straightforward, so this tutorial is more like a collection of From 19837ffaedb70c6da535674dd11977796c113518 Mon Sep 17 00:00:00 2001 From: skyace65 Date: Fri, 28 Jun 2024 18:57:55 -0400 Subject: [PATCH 005/122] Update name of where you get openJDK from --- contributing/development/compiling/compiling_for_android.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/development/compiling/compiling_for_android.rst b/contributing/development/compiling/compiling_for_android.rst index dc67cf3ad2d..49cbacf691a 100644 --- a/contributing/development/compiling/compiling_for_android.rst +++ b/contributing/development/compiling/compiling_for_android.rst @@ -38,7 +38,7 @@ For compiling under Windows, Linux or macOS, the following is required: - Gradle (will be downloaded and installed automatically if missing). - JDK 17 (either OpenJDK or Oracle JDK). - - You can download a build from `ojdkbuild `_. + - You can download a build from `Adoptium `_. .. seealso:: To get the Godot source code for compiling, see :ref:`doc_getting_source`. From f0acf03601fe699d442a2e1ceb5e00f33b30270a Mon Sep 17 00:00:00 2001 From: Tom Spilman Date: Tue, 25 Jun 2024 08:20:34 -0500 Subject: [PATCH 006/122] Update consoles.rst Added Sickhead to porting studios. --- tutorials/platform/consoles.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/platform/consoles.rst b/tutorials/platform/consoles.rst index 373d276a750..02a6e476c2f 100644 --- a/tutorials/platform/consoles.rst +++ b/tutorials/platform/consoles.rst @@ -81,7 +81,7 @@ Following is the list of providers: Switch porting and publishing of Godot games. - `Seaven Studio `_ offers Switch, Xbox One, Xbox Series, PlayStation 4 & PlayStation 5 porting of Godot games. - +- `Sickhead Games `_ offers console porting to Nintendo Switch, PlayStation 4, PlayStation 5, Xbox One, and Xbox Series X/S for Godot games. If your company offers porting, or porting *and* publishing services for Godot games, feel free to From b20a228a29a77dcb2c2a930e4165ce2262f5ff41 Mon Sep 17 00:00:00 2001 From: Stephen Li Date: Sun, 30 Jun 2024 01:48:49 -0400 Subject: [PATCH 007/122] Fix link written in md syntax instead of rst --- tutorials/platform/android/android_plugin.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/platform/android/android_plugin.rst b/tutorials/platform/android/android_plugin.rst index ff810a7b6e5..0674ebdad42 100644 --- a/tutorials/platform/android/android_plugin.rst +++ b/tutorials/platform/android/android_plugin.rst @@ -363,7 +363,7 @@ developers / users intend to run the Godot Editor. Not doing so may prevent deve users from writing code that accesses the plugin from within the Godot Editor. This may involve creating dummy plugins for the host OS just so the API is published to the -editor. You can use the [godot-cpp-template](https://github.com/godotengine/godot-cpp-template) +editor. You can use the `godot-cpp-template `__ github template for reference on how to do so. Godot crashes upon load From 216e362c6ae6dfb0e9b7e5afe39f511f11ed394d Mon Sep 17 00:00:00 2001 From: skyace65 Date: Sat, 22 Jun 2024 12:13:57 -0400 Subject: [PATCH 008/122] Update audio streams page for Godot 4.3 --- tutorials/audio/audio_streams.rst | 37 +++++++++++------- tutorials/audio/img/audio_stream_2d.png | Bin 6240 -> 0 bytes tutorials/audio/img/audio_stream_2d.webp | Bin 0 -> 10936 bytes tutorials/audio/img/audio_stream_2d_area.png | Bin 7179 -> 0 bytes tutorials/audio/img/audio_stream_2d_area.webp | Bin 0 -> 5850 bytes tutorials/audio/img/audio_stream_3d.png | Bin 8413 -> 0 bytes tutorials/audio/img/audio_stream_3d.webp | Bin 0 -> 12746 bytes tutorials/audio/img/audio_stream_3d_area.png | Bin 7505 -> 0 bytes tutorials/audio/img/audio_stream_3d_area.webp | Bin 0 -> 6480 bytes tutorials/audio/img/audio_stream_doppler.png | Bin 3982 -> 0 bytes tutorials/audio/img/audio_stream_doppler.webp | Bin 0 -> 4922 bytes tutorials/audio/img/audio_stream_player.png | Bin 5281 -> 0 bytes tutorials/audio/img/audio_stream_player.webp | Bin 0 -> 7524 bytes .../audio/img/audio_stream_reverb_bus.png | Bin 3001 -> 0 bytes .../audio/img/audio_stream_reverb_bus.webp | Bin 0 -> 2868 bytes .../audio/img/audio_stream_reverb_bus2.png | Bin 9457 -> 0 bytes .../audio/img/audio_stream_reverb_bus2.webp | Bin 0 -> 9960 bytes 17 files changed, 23 insertions(+), 14 deletions(-) delete mode 100644 tutorials/audio/img/audio_stream_2d.png create mode 100644 tutorials/audio/img/audio_stream_2d.webp delete mode 100644 tutorials/audio/img/audio_stream_2d_area.png create mode 100644 tutorials/audio/img/audio_stream_2d_area.webp delete mode 100644 tutorials/audio/img/audio_stream_3d.png create mode 100644 tutorials/audio/img/audio_stream_3d.webp delete mode 100644 tutorials/audio/img/audio_stream_3d_area.png create mode 100644 tutorials/audio/img/audio_stream_3d_area.webp delete mode 100644 tutorials/audio/img/audio_stream_doppler.png create mode 100644 tutorials/audio/img/audio_stream_doppler.webp delete mode 100644 tutorials/audio/img/audio_stream_player.png create mode 100644 tutorials/audio/img/audio_stream_player.webp delete mode 100644 tutorials/audio/img/audio_stream_reverb_bus.png create mode 100644 tutorials/audio/img/audio_stream_reverb_bus.webp delete mode 100644 tutorials/audio/img/audio_stream_reverb_bus2.png create mode 100644 tutorials/audio/img/audio_stream_reverb_bus2.webp diff --git a/tutorials/audio/audio_streams.rst b/tutorials/audio/audio_streams.rst index b831fa14ec2..6419c0b22f7 100644 --- a/tutorials/audio/audio_streams.rst +++ b/tutorials/audio/audio_streams.rst @@ -28,15 +28,24 @@ played back often. AudioStreamPlayer ----------------- -.. image:: img/audio_stream_player.png +.. image:: img/audio_stream_player.webp This is the standard, non-positional stream player. It can play to any bus. In 5.1 sound setups, it can send audio to stereo mix or front speakers. +Playback Type is an experimental setting, and could change in future versions +of Godot. It exists so Web exports use Web Audio-API based samples instead of +streaming all sounds to the browser, unlike most platforms. This prevents the +audio from being garbled in single-threaded Web exports. By default, only the +Web platform will use samples. Changing this setting is not recommended, unless +you have an explicit reason to. You can change the default playback type +for the web and other platforms in the project settings under **Audio > General** +(advanced settings must be turned on to see the setting). + AudioStreamPlayer2D ------------------- -.. image:: img/audio_stream_2d.png +.. image:: img/audio_stream_2d.webp This is a variant of AudioStreamPlayer, but emits sound in a 2D positional environment. When close to the left of the screen, the panning will go left. @@ -49,20 +58,20 @@ When close to the right side, it will go right. different reverb or sound qualities to handle action happening in a particular parts of your game world. -.. image:: img/audio_stream_2d_area.png +.. image:: img/audio_stream_2d_area.webp AudioStreamPlayer3D ------------------- -.. image:: img/audio_stream_3d.png +.. image:: img/audio_stream_3d.webp This is a variant of AudioStreamPlayer, but emits sound in a 3D positional environment. Depending on the location of the player relative to the screen, it can position sound in stereo, 5.1 or 7.1 depending on the chosen audio setup. -Similar to AudioStreamPlayer2D, an Area can divert the sound to an audio bus. +Similar to AudioStreamPlayer2D, an Area3D can divert the sound to an audio bus. -.. image:: img/audio_stream_3d_area.png +.. image:: img/audio_stream_3d_area.webp Unlike for 2D, the 3D version of AudioStreamPlayer has a few more advanced options: @@ -71,20 +80,20 @@ Unlike for 2D, the 3D version of AudioStreamPlayer has a few more advanced optio Reverb buses ~~~~~~~~~~~~ -Godot allows for 3D audio streams that enter a specific Area node to send dry +Godot allows for 3D audio streams that enter a specific Area3D node to send dry and wet audio to separate buses. This is useful when you have several reverb configurations for different types of rooms. This is done by enabling this type -of reverb in the **Reverb Bus** section of the Area's properties: +of reverb in the **Reverb Bus** section of the Area3D's properties: -.. image:: img/audio_stream_reverb_bus.png +.. image:: img/audio_stream_reverb_bus.webp -At the same time, a special bus layout is created where each area receives the -reverb info from each area. A Reverb effect needs to be created and configured +At the same time, a special bus layout is created where each Area3D receives the +reverb info from each Area3D. A Reverb effect needs to be created and configured in each reverb bus to complete the setup for the desired effect: -.. image:: img/audio_stream_reverb_bus2.png +.. image:: img/audio_stream_reverb_bus2.webp -The Area's **Reverb Bus** section also has a parameter named **Uniformity**. +The Area3D's **Reverb Bus** section also has a parameter named **Uniformity**. Some types of rooms bounce sounds more than others (like a warehouse), so reverberation can be heard almost uniformly across the room even though the source may be far away. Playing around with this parameter can simulate @@ -98,7 +107,7 @@ perceived as an increase or decrease in the pitch of the emitted sound. Godot can track velocity changes in the AudioStreamPlayer3D and Camera nodes. Both nodes have this property, which must be enabled manually: -.. image:: img/audio_stream_doppler.png +.. image:: img/audio_stream_doppler.webp Enable it by setting it depending on how objects will be moved: use **Idle** for objects moved using ``_process``, or **Physics** diff --git a/tutorials/audio/img/audio_stream_2d.png b/tutorials/audio/img/audio_stream_2d.png deleted file mode 100644 index 23f899fbe62051e94f261984d7df7e6e453bb304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6240 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 ZoOddz?3NRNyZUng&{ES=tyZxO`9BcK3vK`a diff --git a/tutorials/audio/img/audio_stream_2d.webp b/tutorials/audio/img/audio_stream_2d.webp new file mode 100644 index 0000000000000000000000000000000000000000..c992e521944cfb99833f2ea8020e549e935f1c33 GIT binary patch literal 10936 zcmZvCV{oNGxAjR*FtI(cGqG*k$;7s8XJXrSCblQW#MX(OiOnzXd++`CJ-_gwvM?rLQzaq&7D06;@bSW#V(Q?~eP%y8Qm2v7?fXt4!K-F#?sNIAa~5|L04l~F{j zw%~T|9REDvM$eXt)X7Y}KNS0R>#(SGWZ7Fb>1OWj`kVc9nB=Gr`-mg!7_fEdtf4cw zWkOZef>nCym*R-AuyBf>Vx_6@≤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 literal 0 HcmV?d00001 diff --git a/tutorials/audio/img/audio_stream_3d.png b/tutorials/audio/img/audio_stream_3d.png deleted file mode 100644 index 200b87435d92cb10ccfb1477d442be51c956585d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8413 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 diff --git a/tutorials/audio/img/audio_stream_3d.webp b/tutorials/audio/img/audio_stream_3d.webp new file mode 100644 index 0000000000000000000000000000000000000000..f2ad40bfb438613cd9d54c788acd4669b87bc156 GIT binary patch literal 12746 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 syTrX6AKu~!1^@s6 literal 0 HcmV?d00001 diff --git a/tutorials/audio/img/audio_stream_3d_area.png b/tutorials/audio/img/audio_stream_3d_area.png deleted file mode 100644 index 86f8b951669d4b0168400ce355bfd9f04ce19fd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7505 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 diff --git a/tutorials/audio/img/audio_stream_3d_area.webp b/tutorials/audio/img/audio_stream_3d_area.webp new file mode 100644 index 0000000000000000000000000000000000000000..3f6e9dbda9c787d30a5eb880ba40f8f9c80be6a0 GIT binary patch literal 6480 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 literal 0 HcmV?d00001 diff --git a/tutorials/audio/img/audio_stream_doppler.png b/tutorials/audio/img/audio_stream_doppler.png deleted file mode 100644 index 4c7bf2bd7bbe7176333393472f1b38eff58603ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3982 zcmV;94{`8`P)q>%+Axx&C<%v(#p)y$;{En%FxHk&&SEm#>mda$j!ya&BVvd!^X?P#mm9O z%D}_OzQM=6zs0-0#k#%2y1c@;yTZ4+z_z)-wYb0fo13(^zqGf#vbMdkw7amgy05ai z@s^jZvA3nE(k&~vWvZkr9q^Pi^r>UZ*uB4`@qok*y zq^#GAjh>>a){2dvp`@LlsGOjuo1m$kpQ6!-i<_OHn4G1WoS&DQq?nqXmzkZEn4y!F zpOluHkd&U0l$(x|osN>4j**v&kDH5+mx_&(hm4qsi;;zkmxhXygo%}fiI9Ydl7okj zfrgWUhK_-SkAj7Ye}j#Ff{J{Ck9~oQeSwO5fsT8CiFtpFdwz#_eTQ~@iFJF3c6)_) zdVzI%gmid;a(ISucZG6xfpT_$aCLr-XmD(Efo^hpY;k;QaDQrVd1-EVXl-|9ZG2~J zc4cgPePL>5YII|2d1PsIVrh7LUuR@!a${(7VrOw+XLey`abaa|US)M&V{cw#Ze3z+ zTVirtVQpJrY+GP!SzvHjUvODpYFJ)rSY2pUU2a!gXjEHlRa<9OT4z;SW>Z>gRa#|K zT4q#PWl~vbR#;zCSY%LGXi`^XQdeV8S7=dIVo+6LP*q?}Rc208U{6zBOjBe_Q)Nw3 zTuf44N>O7=QC(3^SxHY^M^9l&PgzAyUq?+^NKIEwN>)rtRzyr*MN3#hOI=7wRYgiy zMM_mdN?b)sR6|KtKuB9cNL4>bT0%!tKSx?VMp-~cQ$IygJ49DKLr^_JO*}$RIYL!C zK~FqEOglkMI6zc7Ku$M6Q#n6PIzLJ~KSwq{Qa3(KH$6)H)93Lkc9VZnSArTZCn-X4C5?daxLW+Y9UD1y103p zYB8?elxNJXbdSV$oi{*lT02PPf#1)d)m2NAh0)f2Av(NT8GH|<9%*o@N`zBX@V-37 zT%iTyBxTm=t+8U@BIF#fv>Lj#b3G*fQ5cx9&ENtgv|y|r?E+lre)Ya&F& z)rsTg(Z;oL#Sk{`&onfa57zQwom?B&#yOlaSO?tHg!P{u5l^g*2_DBYE5wAv{cx0bV5c9Rgv7--t#Fp zU*IN~eKEJ>dtXL6E@mHi3_M=_{uA8K?n6A{xX0_oWq%kNOtq%D>10;dg>IvZ8FC37 z-!bIocZ5Z~+RWVVl&kdcT<1sE(N`>+LAW2XY%IT+WjpyPvxnJF0dBp#<404iN$%G0 zCE0NU;QREx3EA;kBsa5fz5!P=dT9FFFu;r#qFagH5#0Ire!{K$G41xJzQP5_(Q=G~CsF!+TE57eCj0@psEd19Ct6m*u13xS!qrx85qt6po)HxBN{U3|Fc^07XX9U^!1n=4N4 z`7S;k)*m^tzJpH}I=`n}2Nf1Z#fy`>#;3!lr2Vvm&l*0HgZ6Q4nj)&1=Ms@|d-<&A zJL`RV@g1%6c%Ew)wl#aeU&Y03<#UAZ9Pw#IQ*o|-vyTE7WtCk|Sz^SkDm}1$`+?Fb zF>%XIEp8!?1MbnX>-(o0aw~QfaIvd`sYj^L6{A+j-)O+a{1)GN3l_5w!xg|i_yo5C zq%`zi6+);yDCRYJtefSX))J<(t>SHavSwSDE4wn;F*bUmxkiHm!q zm2Ch784GaDejzHHy>VYgKsPv51?J=!o~lYg`|?W=FN3$#kW`_V!1bcNrS5YW=2#y^ zllBFS$}YNDlYw`*BX@?$-A2M1I1?uIU(tZvvX45^+l-HBLKE0j;y(N&a91geE<^_k z3Ibl@BA}q)fYA)j^CZ1e`?bZJGr_c?=tQ3uzzr)>0iTQ+7qEA4`*94@r(MyzzQFze zyNOIgTI1UcSj(^S+*e^W8*x+ZYoPZDN@eu1#i2@tR1CA+myEe1D`1!;1#`tA6H*Py z6`~&8S4?m-U*mdnq@B0Gw?hN{nmVByDs%ykNXZXzi2UC#PN=E~oq?2faA7gG<+*MD zu$cY%Uhz2D6y}bi$ChJn5bimF``!tNnj(_gVjW!5r>cwYv-I%S9l-<#qY3w2hFQcf zW@!>P{E9uy{#xK#!Sk+(3(#i=cTYag;#z*es^-?gHFcZe+rDWB~%c9_xmuH~U z<>mOPu@hYu&0H_Ws0A) zjV8(qhFKw(zB8e0boP39Hbu@o^ylfhGPGLiP z;dvK`7UAMp4{6Xr$?x3L!7k3hyXist;sx_^O9icQHG@`Dg#xQ6?wJn=SmRn1t)>bE zR#9*b*0ND0QeRCK3ap~$>Z_>+1y(UHW_>l)puj2yuBlU%zM5)KU=;(`yfooKV6h4+oTGxu@u8M$04GfAUTzw(35M4Ilo^(!YKDz<#nQ4j6 z{9KJhewT3dg~&38)shO;AWY z3ur~0Nw?^sxSW>^nM`p=_#U%C2*XXYnKS7<^6mB^Z+He@kxW|&k-%@%0| za|oTFdtc#bmF!K@qY3Nh$|cStuRwc_e7RAhT+7UA&(OWEz&(b@vZo0VEasvMbRIb_ zGbMs)vyh>CUm<&la=C;!PF057Ly{u9VIgq|AR6uLV2)FN?k zVP5yZXUl28q8lKgr?!jH|8)=UpPG~=ljZR+a#~BP=HlQ<7#~JQfkih!a@>f6YLB_U zb1S*h+Du%_2j$*%af{)&bOR&-+J_ueyU!K4Txk;HcHM%p8REMK|M;ingL3g8 zM;*td8z2d=wef{W$CV~w!qG}>9`9qz2XLP;@*T>tdAvVbKAxRBKEiBwR+f)v<(^7& o+SrKx9+BK_DHbDF1YzU;7a?(@N!+2a82|tP07*qoM6N<$g8dSt6951J diff --git a/tutorials/audio/img/audio_stream_doppler.webp b/tutorials/audio/img/audio_stream_doppler.webp new file mode 100644 index 0000000000000000000000000000000000000000..f540dc11044c12283d2516229831245b9cc9a6b9 GIT binary patch literal 4922 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 literal 0 HcmV?d00001 diff --git a/tutorials/audio/img/audio_stream_player.png b/tutorials/audio/img/audio_stream_player.png deleted file mode 100644 index b70011e8aff8235c864fc8c9fe91e446c18d8e47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5281 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 W%SgE8VgTcpoXHSks{0h|^5DO--p6$S diff --git a/tutorials/audio/img/audio_stream_reverb_bus.webp b/tutorials/audio/img/audio_stream_reverb_bus.webp new file mode 100644 index 0000000000000000000000000000000000000000..4fc921662d7aff37995854f07f5c799b1c338b5b GIT binary patch literal 2868 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 literal 0 HcmV?d00001 diff --git a/tutorials/audio/img/audio_stream_reverb_bus2.png b/tutorials/audio/img/audio_stream_reverb_bus2.png deleted file mode 100644 index 726104adb5fdbf7e0152b61d55fd47dceca3e854..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9457 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 L`_oMzAprjely*i< literal 0 HcmV?d00001 From 2df4b0291bcb611320bdf146d14fc9879a72fc0a Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 1 Jul 2024 18:55:30 +0200 Subject: [PATCH 009/122] Fix dead links in the documentation Command used: lychee **/*.rst --github-token="..." --accept="100..=103,200..=299,429" 429 error codes were allowed due to a high number of false positives, even with a GitHub token specified. --- about/faq.rst | 2 +- community/tutorials.rst | 1 - .../development/compiling/compiling_for_windows.rst | 2 +- .../compiling/cross-compiling_for_ios_on_linux.rst | 5 +++-- contributing/documentation/docs_image_guidelines.rst | 2 +- tutorials/3d/3d_antialiasing.rst | 2 +- .../importing_3d_scenes/model_export_considerations.rst | 6 ++++-- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/about/faq.rst b/about/faq.rst index 79ddcbfd35c..33f627a1c5f 100644 --- a/about/faq.rst +++ b/about/faq.rst @@ -11,7 +11,7 @@ Frequently asked questions What can I do with Godot? How much does it cost? What are the license terms? ---------------------------------------------------------------------------- -Godot is `Free and open source Software `_ +Godot is `Free and open source Software `_ available under the `OSI-approved `_ MIT license. This means it is free as in "free speech" as well as in "free beer." diff --git a/community/tutorials.rst b/community/tutorials.rst index a52e43b371c..17b26e75591 100644 --- a/community/tutorials.rst +++ b/community/tutorials.rst @@ -62,4 +62,3 @@ Resources - `awesome-godot: A curated list of free/libre plugins, scripts and add-ons `_ - `Godot Asset Library `_ - `Godot Shaders: A community-driven shader library `_ -- `Zeef Godot Engine: A curated directory of resources by Andre Schmitz `_ diff --git a/contributing/development/compiling/compiling_for_windows.rst b/contributing/development/compiling/compiling_for_windows.rst index d3ce579b3aa..1159f410fbe 100644 --- a/contributing/development/compiling/compiling_for_windows.rst +++ b/contributing/development/compiling/compiling_for_windows.rst @@ -317,7 +317,7 @@ Cross-compiling for Windows from other operating systems -------------------------------------------------------- If you are a Linux or macOS user, you need to install -`MinGW-w64 `__, which typically comes in 32-bit +`MinGW-w64 `__, which typically comes in 32-bit and 64-bit variants. The package names may differ based on your distribution, here are some known ones: diff --git a/contributing/development/compiling/cross-compiling_for_ios_on_linux.rst b/contributing/development/compiling/cross-compiling_for_ios_on_linux.rst index 08be816bde8..65cb4cbcc49 100644 --- a/contributing/development/compiling/cross-compiling_for_ios_on_linux.rst +++ b/contributing/development/compiling/cross-compiling_for_ios_on_linux.rst @@ -24,8 +24,9 @@ described here and cross-compiling the binary. Requirements ------------ -- `XCode with the iOS SDK `__ - (a dmg image, for newer versions a **xip** file is going to be downloaded.) +- `XCode with the iOS SDK `__ + (a dmg image, for newer versions a **xip** file is going to be downloaded. + You must be logged into an Apple ID to download Xcode.) - `Clang >= 3.5 `__ for your development machine installed and in the ``PATH``. It has to be version >= 3.5 to target ``arm64`` architecture. diff --git a/contributing/documentation/docs_image_guidelines.rst b/contributing/documentation/docs_image_guidelines.rst index 7ada5455a79..1e32ea765a9 100644 --- a/contributing/documentation/docs_image_guidelines.rst +++ b/contributing/documentation/docs_image_guidelines.rst @@ -67,7 +67,7 @@ have cropping built in it's not always easy to get something precise. And while Krita is designed as a painting program the cropping tool gives you pixel precision by default. Of course, feel free to use a different program you are familiar with. -If you've never used Krita before download it from the `official Krita website `_, +If you've never used Krita before download it from the `official Krita website `_, on Linux you may also be able to download it from your distributions repository, flathub is also an option. Once it's installed on your computer open Krita then open the image you want to crop. This button on the left panel is the crop tool. diff --git a/tutorials/3d/3d_antialiasing.rst b/tutorials/3d/3d_antialiasing.rst index a5e606ce5f4..24582b28241 100644 --- a/tutorials/3d/3d_antialiasing.rst +++ b/tutorials/3d/3d_antialiasing.rst @@ -116,7 +116,7 @@ AMD FidelityFX Super Resolution 2.2 (FSR2) ------------------------------------------ Since Godot 4.2, there is built-in support for -`AMD FidelityFX Super Resolution `__ +`AMD FidelityFX Super Resolution `__ 2.2. This is an :ref:`upscaling method ` compatible with all recent GPUs from any vendor. FSR2 is normally designed to improve performance by lowering the internal 3D rendering resolution, diff --git a/tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.rst b/tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.rst index e4eac5ccef9..21cc09de021 100644 --- a/tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.rst +++ b/tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.rst @@ -39,10 +39,12 @@ Exporting textures separately While textures can be exported with a model in certain file formats, such as glTF 2.0, you can also export them separately. Godot uses PBR (physically based rendering) for its materials, so if a texturing program can export PBR -textures they can work in Godot. This includes the `Substance suite `__, +textures, they can work in Godot. This includes the `Substance suite `__, `ArmorPaint (open source) `__, and `Material Maker (open source) `__. -.. note:: For more information on Godot's materials, see :ref:`doc_standard_material_3d`. +.. seealso:: + + For more information on Godot's materials, see :ref:`doc_standard_material_3d`. Exporting considerations ------------------------ From c49f22045006a795f66066836247a5e31ead188a Mon Sep 17 00:00:00 2001 From: Nacho Date: Mon, 1 Jul 2024 15:06:58 -0300 Subject: [PATCH 010/122] typo --- tutorials/editor/project_manager.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/editor/project_manager.rst b/tutorials/editor/project_manager.rst index 45eaab2aebc..f8c4b6e0ec8 100644 --- a/tutorials/editor/project_manager.rst +++ b/tutorials/editor/project_manager.rst @@ -13,7 +13,7 @@ corner. .. image:: img/editor_ui_intro_project_manager_02.webp -Then on the settings page seelct the language you want from the dropdown menu. +Then on the settings page select the language you want from the dropdown menu. .. image:: img/editor_ui_intro_project_manager_10.webp @@ -97,7 +97,7 @@ This will open up the manage project tags window. To add a tag click the plus bu .. image:: img/editor_ui_intro_project_manager_12.webp -type out the tag name, and click "ok". Your project will now have a tag added to it. +Type out the tag name, and click "ok". Your project will now have a tag added to it. These tags can be used for any other project in your project manager. In addition tags will stay with projects. So if you tag your project, send it to another machine and import it into the project manager you will see the tags you created. From 50b2807440ce5592e3597cb11b2d346e89f33f76 Mon Sep 17 00:00:00 2001 From: Patrick Exner Date: Mon, 1 Jul 2024 18:55:41 +0200 Subject: [PATCH 011/122] Add dependency section to gdextension file docs --- .../gdextension/gdextension_file.rst | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/tutorials/scripting/gdextension/gdextension_file.rst b/tutorials/scripting/gdextension/gdextension_file.rst index ec76b1862a5..c8be05720df 100644 --- a/tutorials/scripting/gdextension/gdextension_file.rst +++ b/tutorials/scripting/gdextension/gdextension_file.rst @@ -129,7 +129,7 @@ Icons section ------------- By default, Godot uses the Node icon in the scene dock for GDExtension nodes. A custom icon can be -set set by reference to its name and resource path of an SVG file. +set by reference to its name and resource path of an SVG file. For example: @@ -141,3 +141,41 @@ For example: The path should point to a 16 by 16 pixel SVG image. Read the guide for :ref:`creating icons ` for more information. + +Dependencies section +-------------------- + +In this section you set the paths of the GDExtension dependencies. This is used internally to export the dependencies +when exporting your game executable. You are able to set which dependency is loaded depending on the feature flags +of the exported executable. In addition, you are able to set an optional subdirectory to move your dependencies into. +In the following example the libraries are moved into a subdirectory called ``libraries``. + +.. code-block:: none + + [dependencies] + + macos.debug = { + "res://bin/libdependency.macos.template_debug.framework" : "libraries" + } + macos.release = { + "res://bin/libdependency.macos.template_release.framework" : "libraries" + } + windows.debug = { + "res://bin/libdependency.windows.template_debug.x86_64.dll" : "libraries", + "res://bin/libdependency.windows.template_debug.x86_32.dll" : "libraries" + } + windows.release = { + "res://bin/libdependency.windows.template_release.x86_64.dll" : "libraries", + "res://bin/libdependency.windows.template_release.x86_32.dll" : "libraries" + } + linux.debug = { + "res://bin/libdependency.linux.template_debug.x86_64.so" : "libraries", + "res://bin/libdependency.linux.template_debug.arm64.so" : "libraries", + "res://bin/libdependency.linux.template_debug.rv64.so" : "libraries" + } + linux.release = { + "res://bin/libdependency.linux.template_release.x86_64.so" : "libraries", + "res://bin/libdependency.linux.template_release.arm64.so" : "libraries", + "res://bin/libdependency.linux.template_release.rv64.so" : "libraries" + } + From 2c5c652baa5727a409e1f4f56ceeaad5d866909c Mon Sep 17 00:00:00 2001 From: Patrick Exner Date: Tue, 2 Jul 2024 21:01:17 +0200 Subject: [PATCH 012/122] Add more precise information about library paths --- .../gdextension/gdextension_file.rst | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/tutorials/scripting/gdextension/gdextension_file.rst b/tutorials/scripting/gdextension/gdextension_file.rst index c8be05720df..13976385eac 100644 --- a/tutorials/scripting/gdextension/gdextension_file.rst +++ b/tutorials/scripting/gdextension/gdextension_file.rst @@ -148,34 +148,38 @@ Dependencies section In this section you set the paths of the GDExtension dependencies. This is used internally to export the dependencies when exporting your game executable. You are able to set which dependency is loaded depending on the feature flags of the exported executable. In addition, you are able to set an optional subdirectory to move your dependencies into. -In the following example the libraries are moved into a subdirectory called ``libraries``. +If no path is supplied Godot will move the libraries into the same directory as your game executable. + +.. warning:: + In MacOS it is necessary to have shared libraries inside a folder called ``Frameworks`` with a directory structure + like this: ``Game.app/Contents/Frameworks``. .. code-block:: none [dependencies] macos.debug = { - "res://bin/libdependency.macos.template_debug.framework" : "libraries" + "res://bin/libdependency.macos.template_debug.framework" : "Contents/Frameworks" } macos.release = { - "res://bin/libdependency.macos.template_release.framework" : "libraries" + "res://bin/libdependency.macos.template_release.framework" : "Contents/Frameworks" } windows.debug = { - "res://bin/libdependency.windows.template_debug.x86_64.dll" : "libraries", - "res://bin/libdependency.windows.template_debug.x86_32.dll" : "libraries" + "res://bin/libdependency.windows.template_debug.x86_64.dll" : "", + "res://bin/libdependency.windows.template_debug.x86_32.dll" : "" } windows.release = { - "res://bin/libdependency.windows.template_release.x86_64.dll" : "libraries", - "res://bin/libdependency.windows.template_release.x86_32.dll" : "libraries" + "res://bin/libdependency.windows.template_release.x86_64.dll" : "", + "res://bin/libdependency.windows.template_release.x86_32.dll" : "" } linux.debug = { - "res://bin/libdependency.linux.template_debug.x86_64.so" : "libraries", - "res://bin/libdependency.linux.template_debug.arm64.so" : "libraries", - "res://bin/libdependency.linux.template_debug.rv64.so" : "libraries" + "res://bin/libdependency.linux.template_debug.x86_64.so" : "", + "res://bin/libdependency.linux.template_debug.arm64.so" : "", + "res://bin/libdependency.linux.template_debug.rv64.so" : "" } linux.release = { - "res://bin/libdependency.linux.template_release.x86_64.so" : "libraries", - "res://bin/libdependency.linux.template_release.arm64.so" : "libraries", - "res://bin/libdependency.linux.template_release.rv64.so" : "libraries" + "res://bin/libdependency.linux.template_release.x86_64.so" : "", + "res://bin/libdependency.linux.template_release.arm64.so" : "", + "res://bin/libdependency.linux.template_release.rv64.so" : "" } From aad53eda429ebcd2b804fc6f16cd220f85f1d9e5 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sun, 30 Jun 2024 23:04:08 +0200 Subject: [PATCH 013/122] Recommend using NVIDIA app to resolve replay indicator issue in Troubleshooting --- tutorials/troubleshooting.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tutorials/troubleshooting.rst b/tutorials/troubleshooting.rst index 186c7c65106..80419494635 100644 --- a/tutorials/troubleshooting.rst +++ b/tutorials/troubleshooting.rst @@ -130,6 +130,12 @@ seen on Windows, as Linux does not have support for ShadowPlay. To disable this overlay, press :kbd:`Alt + Z` (default shortcut for the NVIDIA overlay) and disable **Settings > HUD Layout > Status Indicator** in the NVIDIA overlay. +Alternatively, you can install the `new NVIDIA app +` which replaces GeForce +Experience and does not suffer from this issue. Unlike GeForce Experience, the +NVIDIA app draws the replay indicator in the corner of the screen as opposed to +the corner of each window. + The editor or project appears overly sharp or blurry ---------------------------------------------------- From 98215bb4c4351e0351fc77c292aa7cc23cc01808 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 3 Jul 2024 17:41:25 +0200 Subject: [PATCH 014/122] Mention that signals are first-class types since Godot 4.0 in Using signals --- getting_started/step_by_step/signals.rst | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/getting_started/step_by_step/signals.rst b/getting_started/step_by_step/signals.rst index e3086e27346..5a0e512632f 100644 --- a/getting_started/step_by_step/signals.rst +++ b/getting_started/step_by_step/signals.rst @@ -25,9 +25,17 @@ For example, you might have a life bar on the screen that represents the player's health. When the player takes damage or uses a healing potion, you want the bar to reflect the change. To do so, in Godot, you would use signals. -.. note:: As mentioned in the introduction, signals are Godot's version of the - observer pattern. You can learn more about it here: - https://gameprogrammingpatterns.com/observer.html +Like methods (:ref:`class_callable`), signals are a first-class type since Godot +4.0. This means you can pass them around as method arguments directly without +having to pass them as strings, which allows for better autocompletion and is +less error-prone. See the :ref:`class_signal` class reference for a list of +what you can do with the Signal type directly. + +.. seealso:: + + As mentioned in the introduction, signals are Godot's version of the + observer pattern. You can learn more about it in + `Game Programming Patterns `__. We will now use a signal to make our Godot icon from the previous lesson (:ref:`doc_scripting_player_input`) move and stop by pressing a button. @@ -43,8 +51,6 @@ We will now use a signal to make our Godot icon from the previous lesson camelCase (See :ref:`doc_c_sharp_styleguide`). Be careful to type the method names precisely when connecting signals. -.. Example - Scene setup ----------- @@ -139,10 +145,10 @@ methods "_on_node_name_signal_name". Here, it'll be "_on_button_pressed". toggle the mode in the window's bottom-right by clicking the Advanced button. -.. note:: +.. note:: - If you are using an external editor (such as VS Code) this - automatic code generation might not work. In this case you need to to connect + If you are using an external editor (such as VS Code) this + automatic code generation might not work. In this case you need to to connect the signal via code as explained in the next section. Click the Connect button to complete the signal connection and jump to the From 429e3075d2c98129e452f00195395ef62d31e975 Mon Sep 17 00:00:00 2001 From: Ayan Chavand <71554089+ayanchavand@users.noreply.github.com> Date: Mon, 1 Jul 2024 17:45:43 +0530 Subject: [PATCH 015/122] Updated upgrading_to_godot_4 documentation. - Added xform and xform_inv's change to use * operator. - Provided better details on the changes. --- tutorials/migrating/upgrading_to_godot_4.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorials/migrating/upgrading_to_godot_4.rst b/tutorials/migrating/upgrading_to_godot_4.rst index f4930420067..a5bb987f3d2 100644 --- a/tutorials/migrating/upgrading_to_godot_4.rst +++ b/tutorials/migrating/upgrading_to_godot_4.rst @@ -437,6 +437,7 @@ table to find its new name. - Shortcut's ``is_valid()`` is now ``has_valid_event()``. - TileMap's ``world_to_map()`` is now ``local_to_map()``. - TileMap's ``map_to_world()`` is now ``map_to_local()``. +- Transform2D's ``xform()`` is ``mat * vec`` and ``xform_inv()`` is ``vec * mat``. **Properties** From 1911e25d20ba9c69fafa2acc628856f02a499d85 Mon Sep 17 00:00:00 2001 From: Godot Organization Date: Sat, 6 Jul 2024 03:20:39 +0000 Subject: [PATCH 016/122] classref: Sync with current master branch (b97110c) --- classes/class_animationmixer.rst | 16 ++- classes/class_basis.rst | 2 +- classes/class_button.rst | 2 +- classes/class_canvasitem.rst | 4 +- classes/class_editorexportplugin.rst | 12 ++- classes/class_editorplugin.rst | 2 +- classes/class_editorsettings.rst | 24 ++++- classes/class_enetconnection.rst | 2 +- classes/class_gltfaccessor.rst | 141 ++++++++++++++++++++------- classes/class_graphedit.rst | 2 + classes/class_mesh.rst | 2 + classes/class_nodepath.rst | 6 +- classes/class_projectsettings.rst | 34 ++++++- classes/class_transform3d.rst | 2 +- 14 files changed, 193 insertions(+), 58 deletions(-) diff --git a/classes/class_animationmixer.rst b/classes/class_animationmixer.rst index f452889138d..e654feddab7 100644 --- a/classes/class_animationmixer.rst +++ b/classes/class_animationmixer.rst @@ -504,6 +504,18 @@ A virtual function for processing after getting a key during playback. Adds ``library`` to the animation player, under the key ``name``. +AnimationMixer has a global library by default with an empty string as key. For adding an animation to the global library: + + +.. tabs:: + + .. code-tab:: gdscript + + var global_library = mixer.get_animation_library("") + global_library.add_animation("animation_name", animation_resource) + + + .. rst-class:: classref-item-separator ---- @@ -763,10 +775,10 @@ For example, if an animation with only one key ``Quaternion(0, 0, 0, 1)`` is pla func _process(delta): if Input.is_action_just_pressed("animate"): state_machine.travel("Animate") - var current_root_motion_rotation_accumulator: Quaternion = animation_tree.get_root_motion_Quaternion_accumulator() + var current_root_motion_rotation_accumulator: Quaternion = animation_tree.get_root_motion_rotation_accumulator() var difference: Quaternion = prev_root_motion_rotation_accumulator.inverse() * current_root_motion_rotation_accumulator prev_root_motion_rotation_accumulator = current_root_motion_rotation_accumulator - transform.basis *= difference + transform.basis *= Basis(difference) diff --git a/classes/class_basis.rst b/classes/class_basis.rst index e699ff6d776..5ad7ebeb811 100644 --- a/classes/class_basis.rst +++ b/classes/class_basis.rst @@ -25,7 +25,7 @@ A **Basis** is **orthogonal** if its axes are perpendicular to each other. A bas For a general introduction, see the :doc:`Matrices and transforms <../tutorials/math/matrices_and_transforms>` tutorial. -\ **Note:** Godot uses a `right-handed coordinate system `__, which is a common standard. For directions, the convention for built-in types like :ref:`Camera3D` is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the `Importing 3D Scenes <../tutorials/assets_pipeline/importing_scenes.html#d-asset-direction-conventions>`__ tutorial. +\ **Note:** Godot uses a `right-handed coordinate system `__, which is a common standard. For directions, the convention for built-in types like :ref:`Camera3D` is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the `3D asset direction conventions <../tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.html#d-asset-direction-conventions>`__ tutorial. \ **Note:** The basis matrices are exposed as `column-major `__ order, which is the same as OpenGL. However, they are stored internally in row-major order, which is the same as DirectX. diff --git a/classes/class_button.rst b/classes/class_button.rst index 051c8071d05..6d617ac223f 100644 --- a/classes/class_button.rst +++ b/classes/class_button.rst @@ -557,7 +557,7 @@ Icon modulate :ref:`Color` used when the **Button** is being presse :ref:`int` **align_to_largest_stylebox** = ``0`` :ref:`πŸ”—` -This constant acts as a boolean. If ``true``, text and icon are always aligned to the largest stylebox margins, otherwise it's aligned to the current button state stylebox margins. +This constant acts as a boolean. If ``true``, the minimum size of the button and text/icon alignment is always based on the largest stylebox margins, otherwise it's based on the current button state stylebox margins. .. rst-class:: classref-item-separator diff --git a/classes/class_canvasitem.rst b/classes/class_canvasitem.rst index eb18bdb7958..96b02972e46 100644 --- a/classes/class_canvasitem.rst +++ b/classes/class_canvasitem.rst @@ -735,9 +735,9 @@ If ``true``, this **CanvasItem** is drawn. The node is only visible if all of it - |void| **set_y_sort_enabled**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_y_sort_enabled**\ (\ ) -If ``true``, this and child **CanvasItem** nodes with a lower Y position are rendered in front of nodes with a higher Y position. If ``false``, this and child **CanvasItem** nodes are rendered normally in scene tree order. +If ``true``, this and child **CanvasItem** nodes with a higher Y position are rendered in front of nodes with a lower Y position. If ``false``, this and child **CanvasItem** nodes are rendered normally in scene tree order. -With Y-sorting enabled on a parent node ('A') but disabled on a child node ('B'), the child node ('B') is sorted but its children ('C1', 'C2', etc) render together on the same Y position as the child node 'B'. This allows you to organize the render order of a scene without changing the scene tree. +With Y-sorting enabled on a parent node ('A') but disabled on a child node ('B'), the child node ('B') is sorted but its children ('C1', 'C2', etc) render together on the same Y position as the child node ('B'). This allows you to organize the render order of a scene without changing the scene tree. Nodes sort relative to each other only if they are on the same :ref:`z_index`. diff --git a/classes/class_editorexportplugin.rst b/classes/class_editorexportplugin.rst index 9bf24e20d1c..241e572665d 100644 --- a/classes/class_editorexportplugin.rst +++ b/classes/class_editorexportplugin.rst @@ -127,7 +127,7 @@ Method Descriptions Return ``true`` if this plugin will customize resources based on the platform and features used. -When enabled, :ref:`_get_customization_configuration_hash`, :ref:`_customize_resource` and :ref:`_customize_scene` will be called and must be implemented. +When enabled, :ref:`_get_customization_configuration_hash` and :ref:`_customize_resource` will be called and must be implemented. .. rst-class:: classref-item-separator @@ -139,7 +139,9 @@ When enabled, :ref:`_get_customization_configuration_hash` **_begin_customize_scenes**\ (\ platform\: :ref:`EditorExportPlatform`, features\: :ref:`PackedStringArray`\ ) |virtual| |const| :ref:`πŸ”—` -Return true if this plugin will customize scenes based on the platform and features used. +Return ``true`` if this plugin will customize scenes based on the platform and features used. + +When enabled, :ref:`_get_customization_configuration_hash` and :ref:`_customize_scene` will be called and must be implemented. .. rst-class:: classref-item-separator @@ -229,7 +231,7 @@ Virtual method to be overridden by the user. Called when the export is finished. |void| **_export_file**\ (\ path\: :ref:`String`, type\: :ref:`String`, features\: :ref:`PackedStringArray`\ ) |virtual| :ref:`πŸ”—` -Virtual method to be overridden by the user. Called for each exported file, providing arguments that can be used to identify the file. ``path`` is the path of the file, ``type`` is the :ref:`Resource` represented by the file (e.g. :ref:`PackedScene`) and ``features`` is the list of features for the export. +Virtual method to be overridden by the user. Called for each exported file before :ref:`_customize_resource` and :ref:`_customize_scene`. The arguments can be used to identify the file. ``path`` is the path of the file, ``type`` is the :ref:`Resource` represented by the file (e.g. :ref:`PackedScene`), and ``features`` is the list of features for the export. Calling :ref:`skip` inside this callback will make the file not included in the export. @@ -467,6 +469,8 @@ Adds a custom file to be exported. ``path`` is the virtual path that can be used When called inside :ref:`_export_file` and ``remap`` is ``true``, the current file will not be exported, but instead remapped to this custom file. ``remap`` is ignored when called in other places. +\ ``file`` will not be imported, so consider using :ref:`_customize_resource` to remap imported resources. + .. rst-class:: classref-item-separator ---- @@ -607,7 +611,7 @@ Returns the current value of an export option supplied by :ref:`_get_export_opti |void| **skip**\ (\ ) :ref:`πŸ”—` -To be called inside :ref:`_export_file`, :ref:`_customize_resource`, or :ref:`_customize_scene`. Skips the current file, so it's not included in the export. +To be called inside :ref:`_export_file`. Skips the current file, so it's not included in the export. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_editorplugin.rst b/classes/class_editorplugin.rst index cd00a3e7b51..3d6fc41e45b 100644 --- a/classes/class_editorplugin.rst +++ b/classes/class_editorplugin.rst @@ -1143,7 +1143,7 @@ Optionally, you can specify a shortcut parameter. When pressed, this shortcut wi |void| **add_custom_type**\ (\ type\: :ref:`String`, base\: :ref:`String`, script\: :ref:`Script`, icon\: :ref:`Texture2D`\ ) :ref:`πŸ”—` -Adds a custom type, which will appear in the list of nodes or resources. An icon can be optionally passed. +Adds a custom type, which will appear in the list of nodes or resources. When a given node or resource is selected, the base type will be instantiated (e.g. "Node3D", "Control", "Resource"), then the script will be loaded and set to this object. diff --git a/classes/class_editorsettings.rst b/classes/class_editorsettings.rst index 87720457f7b..e7e58f23a65 100644 --- a/classes/class_editorsettings.rst +++ b/classes/class_editorsettings.rst @@ -187,6 +187,8 @@ Properties +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`editors/animation/autorename_animation_tracks` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`editors/animation/confirm_insert_track` | + +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`editors/animation/default_create_bezier_tracks` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`editors/animation/default_create_reset_tracks` | @@ -1599,6 +1601,20 @@ If ``true``, automatically updates animation tracks' target paths when renaming ---- +.. _class_EditorSettings_property_editors/animation/confirm_insert_track: + +.. rst-class:: classref-property + +:ref:`bool` **editors/animation/confirm_insert_track** :ref:`πŸ”—` + +If ``true``, display a confirmation dialog when adding a new track to an animation by pressing the "key" icon next to a property. Holding Shift will bypass the dialog. + +If ``false``, the behavior is reversed, i.e. the dialog only appears when Shift is held. + +.. rst-class:: classref-item-separator + +---- + .. _class_EditorSettings_property_editors/animation/default_create_bezier_tracks: .. rst-class:: classref-property @@ -4041,7 +4057,7 @@ The indentation style to use (tabs or spaces). :ref:`String` **text_editor/behavior/navigation/custom_word_separators** :ref:`πŸ”—` -The characters to consider as word delimiters if :ref:`text_editor/behavior/navigation/use_custom_word_separators` is ``true``. The characters should be defined without separation, for example ``#_!``. +The characters to consider as word delimiters if :ref:`text_editor/behavior/navigation/use_custom_word_separators` is ``true``. This is in addition to default characters if :ref:`text_editor/behavior/navigation/use_default_word_separators` is ``true``. The characters should be defined without separation, for example ``_β™₯=``. .. rst-class:: classref-item-separator @@ -4127,7 +4143,7 @@ If ``true``, prevents automatically switching between the Script and 2D/3D scree :ref:`bool` **text_editor/behavior/navigation/use_custom_word_separators** :ref:`πŸ”—` -If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` or :kbd:`Cmd + Right` on macOS) bindings will use the behavior of :ref:`text_editor/behavior/navigation/use_default_word_separators`. If ``true``, it will also stop the caret if a character within :ref:`text_editor/behavior/navigation/custom_word_separators` is detected. Useful for subword moving. This behavior also will be applied to the behavior of text selection. +If ``true``, uses the characters in :ref:`text_editor/behavior/navigation/custom_word_separators` as word separators for word navigation and operations. This is in addition to the default characters if :ref:`text_editor/behavior/navigation/use_default_word_separators` is also enabled. Word navigation and operations include double-clicking on a word or holding :kbd:`Ctrl` (:kbd:`Cmd` on macOS) while pressing :kbd:`left`, :kbd:`right`, :kbd:`backspace`, or :kbd:`delete`. .. rst-class:: classref-item-separator @@ -4139,7 +4155,7 @@ If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` :ref:`bool` **text_editor/behavior/navigation/use_default_word_separators** :ref:`πŸ”—` -If ``false``, using :kbd:`Ctrl + Left` or :kbd:`Ctrl + Right` (:kbd:`Cmd + Left` or :kbd:`Cmd + Right` on macOS) bindings will stop moving caret only if a space or punctuation is detected. If ``true``, it will also stop the caret if a character is part of ```!"#$%&'()*+,-./:;<=>?@[\]^`{|}~``, the Unicode General Punctuation table, or the Unicode CJK Punctuation table. Useful for subword moving. This behavior also will be applied to the behavior of text selection. +If ``true``, uses the characters in ```!"#$%&'()*+,-./:;<=>?@[\]^`{|}~``, the Unicode General Punctuation table, and the Unicode CJK Punctuation table as word separators for word navigation and operations. If ``false``, a subset of these characters are used and does not include the characters ``<>$~^=+|``. This is in addition to custom characters if :ref:`text_editor/behavior/navigation/use_custom_word_separators` is also enabled. These characters are used to determine where a word stops. Word navigation and operations include double-clicking on a word or holding :kbd:`Ctrl` (:kbd:`Cmd` on macOS) while pressing :kbd:`left`, :kbd:`right`, :kbd:`backspace`, or :kbd:`delete`. .. rst-class:: classref-item-separator @@ -4225,7 +4241,7 @@ The delay in seconds after which autocompletion suggestions should be displayed :ref:`bool` **text_editor/completion/code_complete_enabled** :ref:`πŸ”—` -If ``true``, code completion will be triggered automatically after :ref:`text_editor/completion/code_complete_delay`. If ``false``, you can still trigger completion manually by pressing :kbd:`Ctrl + Space` (:kbd:`Cmd + Space` on macOS). +If ``true``, code completion will be triggered automatically after :ref:`text_editor/completion/code_complete_delay`. Even if ``false``, code completion can be triggered manually with the ``ui_text_completion_query`` action (by default :kbd:`Ctrl + Space` or :kbd:`Cmd + Space` on macOS). .. rst-class:: classref-item-separator diff --git a/classes/class_enetconnection.rst b/classes/class_enetconnection.rst index 2186fa03f24..2e2647a6fc2 100644 --- a/classes/class_enetconnection.rst +++ b/classes/class_enetconnection.rst @@ -438,7 +438,7 @@ Configures the DTLS server to automatically drop new connections. :ref:`Array` **service**\ (\ timeout\: :ref:`int` = 0\ ) :ref:`πŸ”—` -Waits for events on the host specified and shuttles packets between the host and its peers. The returned :ref:`Array` will have 4 elements. An :ref:`EventType`, the :ref:`ENetPacketPeer` which generated the event, the event associated data (if any), the event associated channel (if any). If the generated event is :ref:`EVENT_RECEIVE`, the received packet will be queued to the associated :ref:`ENetPacketPeer`. +Waits for events on the specified host and shuttles packets between the host and its peers, with the given ``timeout`` (in milliseconds). The returned :ref:`Array` will have 4 elements. An :ref:`EventType`, the :ref:`ENetPacketPeer` which generated the event, the event associated data (if any), the event associated channel (if any). If the generated event is :ref:`EVENT_RECEIVE`, the received packet will be queued to the associated :ref:`ENetPacketPeer`. Call this function regularly to handle connections, disconnections, and to receive new packets. diff --git a/classes/class_gltfaccessor.rst b/classes/class_gltfaccessor.rst index c938fd962ea..d3febd05a38 100644 --- a/classes/class_gltfaccessor.rst +++ b/classes/class_gltfaccessor.rst @@ -40,37 +40,108 @@ Properties .. table:: :widths: auto - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`accessor_type` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`buffer_view` | ``-1`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`byte_offset` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`component_type` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`count` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`PackedFloat64Array` | :ref:`max` | ``PackedFloat64Array()`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`PackedFloat64Array` | :ref:`min` | ``PackedFloat64Array()`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`bool` | :ref:`normalized` | ``false`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`sparse_count` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`sparse_indices_buffer_view` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`sparse_indices_byte_offset` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`sparse_indices_component_type` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`sparse_values_buffer_view` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`sparse_values_byte_offset` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ - | :ref:`int` | :ref:`type` | ``0`` | - +-----------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`GLTFAccessorType` | :ref:`accessor_type` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`buffer_view` | ``-1`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`byte_offset` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`component_type` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`count` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`PackedFloat64Array` | :ref:`max` | ``PackedFloat64Array()`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`PackedFloat64Array` | :ref:`min` | ``PackedFloat64Array()`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`bool` | :ref:`normalized` | ``false`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`sparse_count` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`sparse_indices_buffer_view` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`sparse_indices_byte_offset` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`sparse_indices_component_type` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`sparse_values_buffer_view` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`sparse_values_byte_offset` | ``0`` | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + | :ref:`int` | :ref:`type` | | + +-------------------------------------------------------------+-------------------------------------------------------------------------------------------------+--------------------------+ + +.. rst-class:: classref-section-separator + +---- + +.. rst-class:: classref-descriptions-group + +Enumerations +------------ + +.. _enum_GLTFAccessor_GLTFAccessorType: + +.. rst-class:: classref-enumeration + +enum **GLTFAccessorType**: :ref:`πŸ”—` + +.. _class_GLTFAccessor_constant_TYPE_SCALAR: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_SCALAR** = ``0`` + +Accessor type "SCALAR". For the glTF object model, this can be used to map to a single float, int, or bool value, or a float array. + +.. _class_GLTFAccessor_constant_TYPE_VEC2: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_VEC2** = ``1`` + +Accessor type "VEC2". For the glTF object model, this maps to "float2", represented in the glTF JSON as an array of two floats. + +.. _class_GLTFAccessor_constant_TYPE_VEC3: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_VEC3** = ``2`` + +Accessor type "VEC3". For the glTF object model, this maps to "float3", represented in the glTF JSON as an array of three floats. + +.. _class_GLTFAccessor_constant_TYPE_VEC4: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_VEC4** = ``3`` + +Accessor type "VEC4". For the glTF object model, this maps to "float4", represented in the glTF JSON as an array of four floats. + +.. _class_GLTFAccessor_constant_TYPE_MAT2: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_MAT2** = ``4`` + +Accessor type "MAT2". For the glTF object model, this maps to "float2x2", represented in the glTF JSON as an array of four floats. + +.. _class_GLTFAccessor_constant_TYPE_MAT3: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_MAT3** = ``5`` + +Accessor type "MAT3". For the glTF object model, this maps to "float3x3", represented in the glTF JSON as an array of nine floats. + +.. _class_GLTFAccessor_constant_TYPE_MAT4: + +.. rst-class:: classref-enumeration-constant + +:ref:`GLTFAccessorType` **TYPE_MAT4** = ``6`` + +Accessor type "MAT4". For the glTF object model, this maps to "float4x4", represented in the glTF JSON as an array of sixteen floats. .. rst-class:: classref-section-separator @@ -85,12 +156,12 @@ Property Descriptions .. rst-class:: classref-property -:ref:`int` **accessor_type** = ``0`` :ref:`πŸ”—` +:ref:`GLTFAccessorType` **accessor_type** = ``0`` :ref:`πŸ”—` .. rst-class:: classref-property-setget -- |void| **set_accessor_type**\ (\ value\: :ref:`int`\ ) -- :ref:`int` **get_accessor_type**\ (\ ) +- |void| **set_accessor_type**\ (\ value\: :ref:`GLTFAccessorType`\ ) +- :ref:`GLTFAccessorType` **get_accessor_type**\ (\ ) The GLTF accessor type as an enum. Possible values are 0 for "SCALAR", 1 for "VEC2", 2 for "VEC3", 3 for "VEC4", 4 for "MAT2", 5 for "MAT3", and 6 for "MAT4". @@ -323,7 +394,7 @@ The offset relative to the start of the bufferView in bytes. .. rst-class:: classref-property -:ref:`int` **type** = ``0`` :ref:`πŸ”—` +:ref:`int` **type** :ref:`πŸ”—` .. rst-class:: classref-property-setget diff --git a/classes/class_graphedit.rst b/classes/class_graphedit.rst index 21dbf9a8fc1..9baee6bee1c 100644 --- a/classes/class_graphedit.rst +++ b/classes/class_graphedit.rst @@ -27,6 +27,8 @@ Description \ **Performance:** It is greatly advised to enable low-processor usage mode (see :ref:`OS.low_processor_usage_mode`) when using GraphEdits. +\ **Note:** Keep in mind that :ref:`Node.get_children` will also return the connection layer node named ``_connection_layer`` due to technical limitations. This behavior may change in future releases. + .. rst-class:: classref-reftable-group Properties diff --git a/classes/class_mesh.rst b/classes/class_mesh.rst index ced3064f9a2..c75c8c8ab52 100644 --- a/classes/class_mesh.rst +++ b/classes/class_mesh.rst @@ -191,6 +191,8 @@ enum **ArrayType**: :ref:`πŸ”—` :ref:`PackedVector3Array` of vertex normals. +\ **Note:** The array has to consist of normal vectors, otherwise they will be normalized by the engine, potentially causing visual discrepancies. + .. _class_Mesh_constant_ARRAY_TANGENT: .. rst-class:: classref-enumeration-constant diff --git a/classes/class_nodepath.rst b/classes/class_nodepath.rst index 842dd3e8a9c..8d2fd23fe07 100644 --- a/classes/class_nodepath.rst +++ b/classes/class_nodepath.rst @@ -44,11 +44,13 @@ Despite their name, node paths may also point to a property: :: - ^"position" # Points to this object's position. - ^"position:x" # Points to this object's position in the x axis. + ^":position" # Points to this object's position. + ^":position:x" # Points to this object's position in the x axis. ^"Camera3D:rotation:y" # Points to the child Camera3D and its y rotation. ^"/root:size:x" # Points to the root Window and its width. +In some situations, it's possible to omit the leading ``:`` when pointing to an object's property. As an example, this is the case with :ref:`Object.set_indexed` and :ref:`Tween.tween_property`, as those methods call :ref:`get_as_property_path` under the hood. However, it's generally recommended to keep the ``:`` prefix. + Node paths cannot check whether they are valid and may point to nodes or properties that do not exist. Their meaning depends entirely on the context in which they're used. You usually do not have to worry about the **NodePath** type, as strings are automatically converted to the type when necessary. There are still times when defining node paths is useful. For example, exported **NodePath** properties allow you to easily select any node within the currently edited scene. They are also automatically updated when moving, renaming or deleting nodes in the scene tree editor. See also :ref:`@GDScript.@export_node_path`. diff --git a/classes/class_projectsettings.rst b/classes/class_projectsettings.rst index 0fbdc6a155a..8ffc466461b 100644 --- a/classes/class_projectsettings.rst +++ b/classes/class_projectsettings.rst @@ -705,6 +705,10 @@ Properties +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`input_devices/buffering/agile_event_flushing` | ``false`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`input_devices/buffering/android/use_accumulated_input` | ``true`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`input_devices/buffering/android/use_input_buffering` | ``true`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`input_devices/compatibility/legacy_just_pressed_behavior` | ``false`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`input_devices/pen_tablet/driver` | | @@ -6008,6 +6012,30 @@ Enabling this can greatly improve the responsiveness to input, specially in devi ---- +.. _class_ProjectSettings_property_input_devices/buffering/android/use_accumulated_input: + +.. rst-class:: classref-property + +:ref:`bool` **input_devices/buffering/android/use_accumulated_input** = ``true`` :ref:`πŸ”—` + +If ``true``, multiple input events will be accumulated into a single input event when possible. + +.. rst-class:: classref-item-separator + +---- + +.. _class_ProjectSettings_property_input_devices/buffering/android/use_input_buffering: + +.. rst-class:: classref-property + +:ref:`bool` **input_devices/buffering/android/use_input_buffering** = ``true`` :ref:`πŸ”—` + +If ``true``, input events will be buffered prior to being dispatched. + +.. rst-class:: classref-item-separator + +---- + .. _class_ProjectSettings_property_input_devices/compatibility/legacy_just_pressed_behavior: .. rst-class:: classref-property @@ -9654,8 +9682,6 @@ Sets the number of MSAA samples to use for 2D/Canvas rendering (as a power of tw Sets the number of MSAA samples to use for 3D rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware, especially integrated graphics due to their limited memory bandwidth. See also :ref:`rendering/scaling_3d/mode` for supersampling, which provides higher quality but is much more expensive. This has no effect on shader-induced aliasing or texture aliasing. -\ **Note:** MSAA is only supported in the Forward+ and Mobile rendering methods, not Compatibility. - .. rst-class:: classref-item-separator ---- @@ -11813,7 +11839,7 @@ Specify whether OpenXR should be configured for an HMD or a hand held device. If true and foveation is supported, will automatically adjust foveation level based on framerate up to the level set on :ref:`xr/openxr/foveation_level`. -\ **Note:** Only works on compatibility renderer. +\ **Note:** Only works on the Compatibility rendering method. .. rst-class:: classref-item-separator @@ -11827,7 +11853,7 @@ If true and foveation is supported, will automatically adjust foveation level ba Applied foveation level if supported: 0 = off, 1 = low, 2 = medium, 3 = high. -\ **Note:** Only works on compatibility renderer. +\ **Note:** Only works on the Compatibility rendering method. On platforms other than Android, if :ref:`rendering/anti_aliasing/quality/msaa_3d` is enabled, this feature will be disabled. .. rst-class:: classref-item-separator diff --git a/classes/class_transform3d.rst b/classes/class_transform3d.rst index d5b7f62265d..5c02673f09e 100644 --- a/classes/class_transform3d.rst +++ b/classes/class_transform3d.rst @@ -21,7 +21,7 @@ The **Transform3D** built-in :ref:`Variant` type is a 3Γ—4 matrix For a general introduction, see the :doc:`Matrices and transforms <../tutorials/math/matrices_and_transforms>` tutorial. -\ **Note:** Godot uses a `right-handed coordinate system `__, which is a common standard. For directions, the convention for built-in types like :ref:`Camera3D` is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the `Importing 3D Scenes <../tutorials/assets_pipeline/importing_scenes.html#d-asset-direction-conventions>`__ tutorial. +\ **Note:** Godot uses a `right-handed coordinate system `__, which is a common standard. For directions, the convention for built-in types like :ref:`Camera3D` is for -Z to point forward (+X is right, +Y is up, and +Z is back). Other objects may use different direction conventions. For more information, see the `3D asset direction conventions <../tutorials/assets_pipeline/importing_3d_scenes/model_export_considerations.html#d-asset-direction-conventions>`__ tutorial. .. note:: From 027eca78a0213e0a297256b631561fa58b4e0d70 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 8 Jul 2024 22:04:29 +0200 Subject: [PATCH 017/122] Clarify notice about feature tags being immutable - Update the recommendation to check for the project running on a mobile web browser. --- tutorials/export/feature_tags.rst | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tutorials/export/feature_tags.rst b/tutorials/export/feature_tags.rst index b0183252315..5118c9522b1 100644 --- a/tutorials/export/feature_tags.rst +++ b/tutorials/export/feature_tags.rst @@ -125,15 +125,14 @@ Here is a list of most feature tags in Godot. Keep in mind they are **case-sensi .. warning:: - With the exception of texture compression and ``movie`` feature tags, - default feature tags are **immutable**. This means that they will *not* - change depending on run-time conditions. For example, - ``OS.has_feature("mobile")`` will return ``false`` when running a project - exported to HTML5 on a mobile device. - - To check whether a project exported to HTML5 is running on a mobile device, - :ref:`call JavaScript code ` that reads the browser's - user agent. + With the exception of texture compression, ``web_`` and + ``movie`` feature tags, default feature tags are **immutable**. + This means that they will *not* change depending on run-time conditions. + For example, ``OS.has_feature("mobile")`` will return ``false`` + when running a project exported to Web on a mobile device. + + To check whether a project exported to Web is running on a mobile device, + use ``OS.has_feature("web_android") or OS.web_has_feature("web_ios")``. Custom features --------------- From 17c0745129d510e996aab8b316e574efebbac526 Mon Sep 17 00:00:00 2001 From: Trevor Date: Tue, 9 Jul 2024 16:19:29 -0700 Subject: [PATCH 018/122] Update first_look_at_the_editor.rst (#9574) * Update first_look_at_the_editor.rst add macOS shortcut and cleaning up the click shortcut. --- getting_started/introduction/first_look_at_the_editor.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/getting_started/introduction/first_look_at_the_editor.rst b/getting_started/introduction/first_look_at_the_editor.rst index e7db0b99272..0fab5ee974f 100644 --- a/getting_started/introduction/first_look_at_the_editor.rst +++ b/getting_started/introduction/first_look_at_the_editor.rst @@ -147,8 +147,7 @@ signal by any one of the following methods: * Pressing :kbd:`F1` (or :kbd:`Opt + Space` on macOS, or :kbd:`fn + F1` for laptops with a :kbd:`fn` key) anywhere in the editor. * Clicking the "Search Help" button in the top-right of the Script main screen. * Clicking on the Help menu and Search Help. -* Clicking while pressing the :kbd:`Ctrl` key on a class name, function name, - or built-in variable in the script editor. +* :kbd:`Ctrl + Click` (:kbd:`Cmd + Click` on macOS) on a class name, function name, or built-in variable in the script editor. .. image:: img/editor_intro_search_help_button.webp From 26e8cfaf88516f20e430961deffb7dd180ae08d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=A4=A9?= Date: Wed, 10 Jul 2024 12:14:16 +0800 Subject: [PATCH 019/122] Clarify `INV_VIEW_MATRIX` and `MAIN_CAM_INV_VIEW_MATRIX` (#9544) --- tutorials/shaders/shader_reference/spatial_shader.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tutorials/shaders/shader_reference/spatial_shader.rst b/tutorials/shaders/shader_reference/spatial_shader.rst index 3430f60f9f8..1e030dd1723 100644 --- a/tutorials/shaders/shader_reference/spatial_shader.rst +++ b/tutorials/shaders/shader_reference/spatial_shader.rst @@ -243,6 +243,10 @@ shader, this value can be used as desired. ``MODELVIEW_MATRIX`` combines both the ``MODEL_MATRIX`` and ``VIEW_MATRIX`` and is better suited when floating point issues may arise. For example, if the object is very far away from the world origin, you may run into floating point issues when using the separated ``MODEL_MATRIX`` and ``VIEW_MATRIX``. +.. note:: + + ``INV_VIEW_MATRIX`` is the matrix used for rendering the object in that pass, not like ``MAIN_CAM_INV_VIEW_MATRIX``, which is the matrix of the camera in the scene. In the shadow pass, ``INV_VIEW_MATRIX``'s view is based on the camera that is located at the position of the light. + Fragment built-ins ^^^^^^^^^^^^^^^^^^ From 86971c361c907a21b1f5714026a0d80c45e34bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Thu, 11 Jul 2024 12:32:14 +0200 Subject: [PATCH 020/122] Remove references to the no longer needed DXC --- .../compiling/compiling_for_windows.rst | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/contributing/development/compiling/compiling_for_windows.rst b/contributing/development/compiling/compiling_for_windows.rst index 1159f410fbe..e0b61bbe29d 100644 --- a/contributing/development/compiling/compiling_for_windows.rst +++ b/contributing/development/compiling/compiling_for_windows.rst @@ -167,12 +167,8 @@ Compiling with support for Direct3D 12 By default, builds of Godot do not contain support for the Direct3D 12 graphics API. -To compile Godot with Direct3D 12 support you need at least the following: +To compile Godot with Direct3D 12 support you need at least the following item: -- `The DirectX Shader Compiler `_. - The zip folder will be named "dxc\_" followed by the date of release. Download - it anywhere, unzip it and remember the path to the unzipped folder, you will - need it below. - `godot-nir-static library `_. We compile the Mesa libraries you will need into a static library. Download it anywhere, unzip it and remember the path to the unzipped folder, you will @@ -232,23 +228,13 @@ look for the additional libraries: .. code-block:: doscon - C:\godot> scons platform=windows d3d12=yes dxc_path=<...> mesa_libs=<...> + C:\godot> scons platform=windows d3d12=yes mesa_libs=<...> Or, with all options enabled: .. code-block:: doscon - C:\godot> scons platform=windows d3d12=yes dxc_path=<...> mesa_libs=<...> agility_sdk_path=<...> pix_path=<...> - -.. note:: The build process will copy ``dxil.dll`` from the ``bin//`` - directory in the DXC folder to the Godot binary directory and the - appropriate ``bin/`` file in the Godot binary directory. - Direct3D 12-enabled Godot packages for distribution to end users must - include the ``dxil.dll`` (and relevant folders if using multi-arch), - both for the editor and games. At runtime, the renderer will try to - load the DLL from the arch-specific folders, and will fall back to the - same directory as the Godot executable if the appropriate arch isn't - found. + C:\godot> scons platform=windows d3d12=yes mesa_libs=<...> agility_sdk_path=<...> pix_path=<...> .. note:: For the Agility SDK's DLLs you have to explicitly choose the kind of workflow. Single-arch is the default (DLLs copied to ``bin/``). If you From 3e38c269adf2260c8b2e57bf5ee518dbc655eaa0 Mon Sep 17 00:00:00 2001 From: Trevor Date: Fri, 12 Jul 2024 19:29:43 -0700 Subject: [PATCH 021/122] macOS screenshot updates to learning_new_features.rst (#9580) * Update learning_new_features.rst * Update getting_started/introduction/learning_new_features.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --------- Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- getting_started/introduction/learning_new_features.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/getting_started/introduction/learning_new_features.rst b/getting_started/introduction/learning_new_features.rst index b6802b6b186..cae20a23b6c 100644 --- a/getting_started/introduction/learning_new_features.rst +++ b/getting_started/introduction/learning_new_features.rst @@ -56,8 +56,8 @@ A class reference's page tells you: `_ GitHub repository to report it. -You can Ctrl-click (Cmd-click on MacOS) any underlined text like the name of a class, property, -method, signal, or constant to jump to it. +You can hold :kbd:`Ctrl` (macOS :kbd:`Cmd`) and then mouseover text like the name of a class, property, +method, signal, or constant to underline it, then :kbd:`Ctrl + Click` (macOS :kbd:`Cmd + Click`) it to jump to it. Learning to think like a programmer ----------------------------------- @@ -121,10 +121,11 @@ information: Also, please don't take a picture with your phone, the low quality and screen reflections can make it hard to understand the image. Your operating system should have a built-in tool to take screenshots with the :kbd:`PrtSc` (Print - Screen) key. + Screen) key (macOS: use :kbd:`Cmd + Shift + 3` for a full screen shot, + `more information here `_). Alternatively, you can use a program like `ShareX `_ - on Windows or `FlameShot `_ on Linux. + on Windows, or `FlameShot `_ on Linux. 5. Sharing a video of your running game can also be really **useful to troubleshoot your game**. You can use programs like `OBS Studio From 625b54fb138ac2a4bdc16a23f41ed37c6413c3b5 Mon Sep 17 00:00:00 2001 From: Godot Organization Date: Sat, 13 Jul 2024 03:20:15 +0000 Subject: [PATCH 022/122] classref: Sync with current master branch (97b8ad1) --- classes/class_animation.rst | 2 +- classes/class_animationmixer.rst | 4 +- classes/class_array.rst | 580 ++++++++++-------- classes/class_editorexportplatformwindows.rst | 2 +- classes/class_os.rst | 2 +- .../class_physicspointqueryparameters2d.rst | 2 + .../class_physicspointqueryparameters3d.rst | 2 + classes/class_physicsrayqueryparameters2d.rst | 2 + classes/class_physicsrayqueryparameters3d.rst | 2 + .../class_physicsshapequeryparameters2d.rst | 2 + .../class_physicsshapequeryparameters3d.rst | 2 + classes/class_popupmenu.rst | 16 + classes/class_projectsettings.rst | 24 +- classes/class_renderdataextension.rst | 10 +- classes/class_scripteditorbase.rst | 2 +- classes/class_transform2d.rst | 164 +++-- classes/class_xrinterface.rst | 8 + classes/class_xrnode3d.rst | 8 + 18 files changed, 530 insertions(+), 304 deletions(-) diff --git a/classes/class_animation.rst b/classes/class_animation.rst index 4d37c7df846..c977ca1a26e 100644 --- a/classes/class_animation.rst +++ b/classes/class_animation.rst @@ -1347,7 +1347,7 @@ Sets the value of an existing key. |void| **track_set_path**\ (\ track_idx\: :ref:`int`, path\: :ref:`NodePath`\ ) :ref:`πŸ”—` -Sets the path of a track. Paths must be valid scene-tree paths to a node and must be specified starting from the parent node of the node that will reproduce the animation. Tracks that control properties or bones must append their name after the path, separated by ``":"``. +Sets the path of a track. Paths must be valid scene-tree paths to a node and must be specified starting from the :ref:`AnimationMixer.root_node` that will reproduce the animation. Tracks that control properties or bones must append their name after the path, separated by ``":"``. For example, ``"character/skeleton:ankle"`` or ``"character/mesh:transform/local"``. diff --git a/classes/class_animationmixer.rst b/classes/class_animationmixer.rst index e654feddab7..42d15af41cb 100644 --- a/classes/class_animationmixer.rst +++ b/classes/class_animationmixer.rst @@ -454,9 +454,9 @@ This makes it more convenient to preview and edit animations in the editor, as c - |void| **set_root_motion_track**\ (\ value\: :ref:`NodePath`\ ) - :ref:`NodePath` **get_root_motion_track**\ (\ ) -The path to the Animation track used for root motion. Paths must be valid scene-tree paths to a node, and must be specified starting from the parent node of the node that will reproduce the animation. To specify a track that controls properties or bones, append its name after the path, separated by ``":"``. For example, ``"character/skeleton:ankle"`` or ``"character/mesh:transform/local"``. +The path to the Animation track used for root motion. Paths must be valid scene-tree paths to a node, and must be specified starting from the parent node of the node that will reproduce the animation. The :ref:`root_motion_track` uses the same format as :ref:`Animation.track_set_path`, but note that a bone must be specified. -If the track has type :ref:`Animation.TYPE_POSITION_3D`, :ref:`Animation.TYPE_ROTATION_3D` or :ref:`Animation.TYPE_SCALE_3D` the transformation will be canceled visually, and the animation will appear to stay in place. See also :ref:`get_root_motion_position`, :ref:`get_root_motion_rotation`, :ref:`get_root_motion_scale` and :ref:`RootMotionView`. +If the track has type :ref:`Animation.TYPE_POSITION_3D`, :ref:`Animation.TYPE_ROTATION_3D`, or :ref:`Animation.TYPE_SCALE_3D` the transformation will be canceled visually, and the animation will appear to stay in place. See also :ref:`get_root_motion_position`, :ref:`get_root_motion_rotation`, :ref:`get_root_motion_scale`, and :ref:`RootMotionView`. .. rst-class:: classref-item-separator diff --git a/classes/class_array.rst b/classes/class_array.rst index 450bbd9761c..aba6bcbb539 100644 --- a/classes/class_array.rst +++ b/classes/class_array.rst @@ -17,7 +17,7 @@ A built-in data structure that holds a sequence of elements. Description ----------- -An array data structure that can contain a sequence of elements of any type. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.). +An array data structure that can contain a sequence of elements of any :ref:`Variant` type. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.). \ **Example:**\ @@ -26,45 +26,29 @@ An array data structure that can contain a sequence of elements of any type. Ele .. code-tab:: gdscript - var array = ["One", 2, 3, "Four"] - print(array[0]) # One. - print(array[2]) # 3. - print(array[-1]) # Four. - array[2] = "Three" - print(array[-2]) # Three. - - .. code-tab:: csharp - - var array = new Godot.Collections.Array{"One", 2, 3, "Four"}; - GD.Print(array[0]); // One. - GD.Print(array[2]); // 3. - GD.Print(array[array.Count - 1]); // Four. - array[2] = "Three"; - GD.Print(array[array.Count - 2]); // Three. - - - -Arrays can be concatenated using the ``+`` operator: - - -.. tabs:: - - .. code-tab:: gdscript - - var array1 = ["One", 2] - var array2 = [3, "Four"] - print(array1 + array2) # ["One", 2, 3, "Four"] + var array = ["First", 2, 3, "Last"] + print(array[0]) # Prints "First" + print(array[2]) # Prints 3 + print(array[-1]) # Prints "Last" + + array[1] = "Second" + print(array[1]) # Prints "Second" + print(array[-3]) # Prints "Second" .. code-tab:: csharp - // Array concatenation is not possible with C# arrays, but is with Godot.Collections.Array. - var array1 = new Godot.Collections.Array{"One", 2}; - var array2 = new Godot.Collections.Array{3, "Four"}; - GD.Print(array1 + array2); // Prints [One, 2, 3, Four] + var array = new Godot.Collections.Array{"First", 2, 3, "Last"}; + GD.Print(array[0]); // Prints "First" + GD.Print(array[2]); // Prints 3 + GD.Print(array[array.Count - 1]); // Prints "Last" + + array[2] = "Second"; + GD.Print(array[1]); // Prints "Second" + GD.Print(array[array.Count - 3]); // Prints "Second" -\ **Note:** Arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use :ref:`duplicate`. +\ **Note:** Arrays are always passed by **reference**. To get a copy of an array that can be modified independently of the original array, use :ref:`duplicate`. \ **Note:** Erasing elements while iterating over arrays is **not** supported and will result in unpredictable behavior. @@ -263,37 +247,41 @@ Constructs an empty **Array**. :ref:`Array` **Array**\ (\ base\: :ref:`Array`, type\: :ref:`int`, class_name\: :ref:`StringName`, script\: :ref:`Variant`\ ) -Creates a typed array from the ``base`` array. All arguments are required. +Creates a typed array from the ``base`` array. A typed array can only contain elements of the given type, or that inherit from the given class, as described by this constructor's parameters: -- ``type`` is the built-in type as a :ref:`Variant.Type` constant, for example :ref:`@GlobalScope.TYPE_INT`. +- ``type`` is the built-in :ref:`Variant` type, as one the :ref:`Variant.Type` constants. -- ``class_name`` is the **native** class name, for example :ref:`Node`. If ``type`` is not :ref:`@GlobalScope.TYPE_OBJECT`, must be an empty string. +- ``class_name`` is the built-in class name (see :ref:`Object.get_class`). -- ``script`` is the associated script. Must be a :ref:`Script` instance or ``null``. +- ``script`` is the associated script. It must be a :ref:`Script` instance or ``null``. -Examples: +If ``type`` is not :ref:`@GlobalScope.TYPE_OBJECT`, ``class_name`` must be an empty :ref:`StringName` and ``script`` must be ``null``. :: - class_name MyNode + class_name Sword extends Node - class MyClass: + class Stats: pass func _ready(): - var a = Array([], TYPE_INT, &"", null) # Array[int] - var b = Array([], TYPE_OBJECT, &"Node", null) # Array[Node] - var c = Array([], TYPE_OBJECT, &"Node", MyNode) # Array[MyNode] - var d = Array([], TYPE_OBJECT, &"RefCounted", MyClass) # Array[MyClass] + var a = Array([], TYPE_INT, "", null) # Array[int] + var b = Array([], TYPE_OBJECT, "Node", null) # Array[Node] + var c = Array([], TYPE_OBJECT, "Node", Sword) # Array[Sword] + var d = Array([], TYPE_OBJECT, "RefCounted", Stats) # Array[Stats] + +The ``base`` array's elements are converted when necessary. If this is not possible or ``base`` is already typed, this constructor fails and returns an empty **Array**. -\ **Note:** This constructor can be useful if you want to create a typed array on the fly, but you are not required to use it. In GDScript you can use a temporary variable with the static type you need and then pass it: +In GDScript, this constructor is usually not necessary, as it is possible to create a typed array through static typing: :: - func _ready(): - var a: Array[int] = [] - some_func(a) + var numbers: Array[float] = [] + var children: Array[Node] = [$Node, $Sprite2D, $RigidBody3D] + + var integers: Array[int] = [0.2, 4.5, -2.0] + print(integers) # Prints [0, 4, -2] .. rst-class:: classref-item-separator @@ -420,22 +408,50 @@ Method Descriptions :ref:`bool` **all**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`πŸ”—` -Calls the provided :ref:`Callable` on each element in the array and returns ``true`` if the :ref:`Callable` returns ``true`` for *all* elements in the array. If the :ref:`Callable` returns ``false`` for one array element or more, this method returns ``false``. +Calls the given :ref:`Callable` on each element in the array and returns ``true`` if the :ref:`Callable` returns ``true`` for *all* elements in the array. If the :ref:`Callable` returns ``false`` for one array element or more, this method returns ``false``. -The callable's method should take one :ref:`Variant` parameter (the current array element) and return a boolean value. +The ``method`` should take one :ref:`Variant` parameter (the current array element) and return a :ref:`bool`. -:: +.. tabs:: + + .. code-tab:: gdscript + + func greater_than_5(number): + return number > 5 + func _ready(): - print([6, 10, 6].all(greater_than_5)) # Prints True (3/3 elements evaluate to `true`). - print([4, 10, 4].all(greater_than_5)) # Prints False (1/3 elements evaluate to `true`). - print([4, 4, 4].all(greater_than_5)) # Prints False (0/3 elements evaluate to `true`). - print([].all(greater_than_5)) # Prints True (0/0 elements evaluate to `true`). + print([6, 10, 6].all(greater_than_5)) # Prints true (3/3 elements evaluate to true). + print([4, 10, 4].all(greater_than_5)) # Prints false (1/3 elements evaluate to true). + print([4, 4, 4].all(greater_than_5)) # Prints false (0/3 elements evaluate to true). + print([].all(greater_than_5)) # Prints true (0/0 elements evaluate to true). - print([6, 10, 6].all(func(number): return number > 5)) # Prints True. Same as the first line above, but using lambda function. + # Same as the first line above, but using a lambda function. + print([6, 10, 6].all(func(element): return element > 5)) # Prints true + + .. code-tab:: csharp + + private static bool GreaterThan5(int number) + { + return number > 5; + } - func greater_than_5(number): - return number > 5 + public override void _Ready() + { + // Prints true (3/3 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(GreaterThan5)); + // Prints false (1/3 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { 4, 10, 4 }.All(GreaterThan5)); + // Prints false (0/3 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { 4, 4, 4 }.All(GreaterThan5)); + // Prints true (0/0 elements evaluate to true). + GD.Print(new Godot.Collections.Array>int< { }.All(GreaterThan5)); + + // Same as the first line above, but using a lambda function. + GD.Print(new Godot.Collections.Array>int< { 6, 10, 6 }.All(element => element > 5)); // Prints true + } + + See also :ref:`any`, :ref:`filter`, :ref:`map` and :ref:`reduce`. @@ -453,22 +469,23 @@ See also :ref:`any`, :ref:`filter` **any**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`πŸ”—` -Calls the provided :ref:`Callable` on each element in the array and returns ``true`` if the :ref:`Callable` returns ``true`` for *one or more* elements in the array. If the :ref:`Callable` returns ``false`` for all elements in the array, this method returns ``false``. +Calls the given :ref:`Callable` on each element in the array and returns ``true`` if the :ref:`Callable` returns ``true`` for *one or more* elements in the array. If the :ref:`Callable` returns ``false`` for all elements in the array, this method returns ``false``. -The callable's method should take one :ref:`Variant` parameter (the current array element) and return a boolean value. +The ``method`` should take one :ref:`Variant` parameter (the current array element) and return a :ref:`bool`. :: - func _ready(): - print([6, 10, 6].any(greater_than_5)) # Prints True (3 elements evaluate to `true`). - print([4, 10, 4].any(greater_than_5)) # Prints True (1 elements evaluate to `true`). - print([4, 4, 4].any(greater_than_5)) # Prints False (0 elements evaluate to `true`). - print([].any(greater_than_5)) # Prints False (0 elements evaluate to `true`). - - print([6, 10, 6].any(func(number): return number > 5)) # Prints True. Same as the first line above, but using lambda function. - func greater_than_5(number): return number > 5 + + func _ready(): + print([6, 10, 6].any(greater_than_5)) # Prints true (3 elements evaluate to true). + print([4, 10, 4].any(greater_than_5)) # Prints true (1 elements evaluate to true). + print([4, 4, 4].any(greater_than_5)) # Prints false (0 elements evaluate to true). + print([].any(greater_than_5)) # Prints false (0 elements evaluate to true). + + # Same as the first line above, but using a lambda function. + print([6, 10, 6].any(func(number): return number > 5)) # Prints true See also :ref:`all`, :ref:`filter`, :ref:`map` and :ref:`reduce`. @@ -486,7 +503,7 @@ See also :ref:`all`, :ref:`filter`\ ) :ref:`πŸ”—` -Appends an element at the end of the array (alias of :ref:`push_back`). +Appends ``value`` at the end of the array (alias of :ref:`push_back`). .. rst-class:: classref-item-separator @@ -498,14 +515,14 @@ Appends an element at the end of the array (alias of :ref:`push_back`\ ) :ref:`πŸ”—` -Appends another array at the end of this array. +Appends another ``array`` at the end of this array. :: - var array1 = [1, 2, 3] - var array2 = [4, 5, 6] - array1.append_array(array2) - print(array1) # Prints [1, 2, 3, 4, 5, 6]. + var numbers = [1, 2, 3] + var extra = [4, 5, 6] + numbers.append_array(extra) + print(nums) # Prints [1, 2, 3, 4, 5, 6] .. rst-class:: classref-item-separator @@ -529,9 +546,9 @@ Assigns elements of another ``array`` into the array. Resizes the array to match :ref:`Variant` **back**\ (\ ) |const| :ref:`πŸ”—` -Returns the last element of the array. Prints an error and returns ``null`` if the array is empty. +Returns the last element of the array. If the array is empty, fails and returns ``null``. See also :ref:`front`. -\ **Note:** Calling this function is not the same as writing ``array[-1]``. If the array is empty, accessing by index will pause project execution when running from the editor. +\ **Note:** Unlike with the ``[]`` operator (``array[-1]``), an error is generated without stopping project execution. .. rst-class:: classref-item-separator @@ -543,15 +560,23 @@ Returns the last element of the array. Prints an error and returns ``null`` if t :ref:`int` **bsearch**\ (\ value\: :ref:`Variant`, before\: :ref:`bool` = true\ ) |const| :ref:`πŸ”—` -Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search. Optionally, a ``before`` specifier can be passed. If ``false``, the returned index comes after all existing entries of the value in the array. +Returns the index of ``value`` in the sorted array. If it cannot be found, returns where ``value`` should be inserted to keep the array sorted. The algorithm used is `binary search `__. + +If ``before`` is ``true`` (as by default), the returned index comes before all existing elements equal to ``value`` in the array. :: - var array = ["a", "b", "c", "c", "d", "e"] - print(array.bsearch("c", true)) # Prints 2, at the first matching element. - print(array.bsearch("c", false)) # Prints 4, after the last matching element, pointing to "d". + var numbers = [2, 4, 8, 10] + var idx = numbers.bsearch(7) + + numbers.insert(idx, 7) + print(numbers) # Prints [2, 4, 7, 8, 10] + + var fruits = ["Apple", "Lemon", "Lemon", "Orange"] + print(fruits.bsearch("Lemon", true)) # Prints 1, points at the first "Lemon". + print(fruits.bsearch("Lemon", false)) # Prints 3, points at "Orange". -\ **Note:** Calling :ref:`bsearch` on an unsorted array results in unexpected behavior. +\ **Note:** Calling :ref:`bsearch` on an *unsorted* array will result in unexpected behavior. Use :ref:`sort` before calling this method. .. rst-class:: classref-item-separator @@ -563,11 +588,34 @@ Finds the index of an existing value (or the insertion index that maintains sort :ref:`int` **bsearch_custom**\ (\ value\: :ref:`Variant`, func\: :ref:`Callable`, before\: :ref:`bool` = true\ ) |const| :ref:`πŸ”—` -Finds the index of an existing value (or the insertion index that maintains sorting order, if the value is not yet present in the array) using binary search and a custom comparison method. Optionally, a ``before`` specifier can be passed. If ``false``, the returned index comes after all existing entries of the value in the array. The custom method receives two arguments (an element from the array and the value searched for) and must return ``true`` if the first argument is less than the second, and return ``false`` otherwise. +Returns the index of ``value`` in the sorted array. If it cannot be found, returns where ``value`` should be inserted to keep the array sorted (using ``func`` for the comparisons). The algorithm used is `binary search `__. -\ **Note:** The custom method must accept the two arguments in any order, you cannot rely on that the first argument will always be from the array. +Similar to :ref:`sort_custom`, ``func`` is called as many times as necessary, receiving one array element and ``value`` as arguments. The function should return ``true`` if the array element should be *behind* ``value``, otherwise it should return ``false``. -\ **Note:** Calling :ref:`bsearch_custom` on an unsorted array results in unexpected behavior. +If ``before`` is ``true`` (as by default), the returned index comes before all existing elements equal to ``value`` in the array. + +:: + + func sort_by_amount(a, b): + if a[1] < b[1]: + return true + return false + + func _ready(): + var my_items = [["Tomato", 2], ["Kiwi", 5], ["Rice", 9]] + + var apple = ["Apple", 5] + # "Apple" is inserted before "Kiwi". + my_items.insert(my_items.bsearch_custom(apple, sort_by_amount, true), apple) + + var banana = ["Banana", 5] + # "Banana" is inserted after "Kiwi". + my_items.insert(my_items.bsearch_custom(banana, sort_by_amount, false), banana) + + # Prints [["Tomato", 2], ["Apple", 5], ["Kiwi", 5], ["Banana", 5], ["Rice", 9]] + print(my_items) + +\ **Note:** Calling :ref:`bsearch_custom` on an *unsorted* array will result in unexpected behavior. Use :ref:`sort_custom` with ``func`` before calling this method. .. rst-class:: classref-item-separator @@ -579,7 +627,7 @@ Finds the index of an existing value (or the insertion index that maintains sort |void| **clear**\ (\ ) :ref:`πŸ”—` -Clears the array. This is equivalent to using :ref:`resize` with a size of ``0``. +Removes all elements from the array. This is equivalent to using :ref:`resize` with a size of ``0``. .. rst-class:: classref-item-separator @@ -603,9 +651,11 @@ Returns the number of times an element is in the array. :ref:`Array` **duplicate**\ (\ deep\: :ref:`bool` = false\ ) |const| :ref:`πŸ”—` -Returns a copy of the array. +Returns a new copy of the array. -If ``deep`` is ``true``, a deep copy is performed: all nested arrays and dictionaries are duplicated and will not be shared with the original array. If ``false``, a shallow copy is made and references to the original nested arrays and dictionaries are kept, so that modifying a sub-array or dictionary in the copy will also impact those referenced in the source array. Note that any :ref:`Object`-derived elements will be shallow copied regardless of the ``deep`` setting. +By default, a **shallow** copy is returned: all nested **Array** and :ref:`Dictionary` elements are shared with the original array. Modifying them in one array will also affect them in the other. + +If ``deep`` is ``true``, a **deep** copy is returned: all nested arrays and dictionaries are also duplicated (recursively). .. rst-class:: classref-item-separator @@ -617,13 +667,11 @@ If ``deep`` is ``true``, a deep copy is performed: all nested arrays and diction |void| **erase**\ (\ value\: :ref:`Variant`\ ) :ref:`πŸ”—` -Removes the first occurrence of a value from the array. If the value does not exist in the array, nothing happens. To remove an element by index, use :ref:`remove_at` instead. - -\ **Note:** This method acts in-place and doesn't return a modified array. +Finds and removes the first occurrence of ``value`` from the array. If ``value`` does not exist in the array, nothing happens. To remove an element by index, use :ref:`remove_at` instead. -\ **Note:** On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed. +\ **Note:** This method shifts every element's index after the removed ``value`` back, which may have a noticeable performance cost, especially on larger arrays. -\ **Note:** Do not erase entries while iterating over the array. +\ **Note:** Erasing elements while iterating over arrays is **not** supported and will result in unpredictable behavior. .. rst-class:: classref-item-separator @@ -635,7 +683,9 @@ Removes the first occurrence of a value from the array. If the value does not ex |void| **fill**\ (\ value\: :ref:`Variant`\ ) :ref:`πŸ”—` -Assigns the given value to all elements in the array. This can typically be used together with :ref:`resize` to create an array with a given size and initialized elements: +Assigns the given ``value`` to all elements in the array. + +This method can often be combined with :ref:`resize` to create an array with a given size and initialized elements: .. tabs:: @@ -643,18 +693,20 @@ Assigns the given value to all elements in the array. This can typically be used .. code-tab:: gdscript var array = [] - array.resize(10) - array.fill(0) # Initialize the 10 elements to 0. + array.resize(5) + array.fill(2) + print(array) # Prints [2, 2, 2, 2, 2] .. code-tab:: csharp var array = new Godot.Collections.Array(); - array.Resize(10); - array.Fill(0); // Initialize the 10 elements to 0. + array.Resize(5); + array.Fill(2); + GD.Print(array); // Prints [2, 2, 2, 2, 2] -\ **Note:** If ``value`` is of a reference type (:ref:`Object`-derived, **Array**, :ref:`Dictionary`, etc.) then the array is filled with the references to the same object, i.e. no duplicates are created. +\ **Note:** If ``value`` is a :ref:`Variant` passed by reference (:ref:`Object`-derived, **Array**, :ref:`Dictionary`, etc.), the array will be filled with references to the same ``value``, which are not duplicates. .. rst-class:: classref-item-separator @@ -666,18 +718,20 @@ Assigns the given value to all elements in the array. This can typically be used :ref:`Array` **filter**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`πŸ”—` -Calls the provided :ref:`Callable` on each element in the array and returns a new array with the elements for which the method returned ``true``. +Calls the given :ref:`Callable` on each element in the array and returns a new, filtered **Array**. -The callable's method should take one :ref:`Variant` parameter (the current array element) and return a boolean value. +The ``method`` receives one of the array elements as an argument, and should return ``true`` to add the element to the filtered array, or ``false`` to exclude it. :: + func is_even(number): + return number % 2 == 0 + func _ready(): - print([1, 2, 3].filter(remove_1)) # Prints [2, 3]. - print([1, 2, 3].filter(func(number): return number != 1)) # Same as above, but using lambda function. + print([1, 4, 5, 8].filter(is_even)) # Prints [4, 8] - func remove_1(number): - return number != 1 + # Same as above, but using a lambda function. + print([1, 4, 5, 8].filter(func(number): return number % 2 == 0)) See also :ref:`any`, :ref:`all`, :ref:`map` and :ref:`reduce`. @@ -691,7 +745,11 @@ See also :ref:`any`, :ref:`all`, :ref:`int` **find**\ (\ what\: :ref:`Variant`, from\: :ref:`int` = 0\ ) |const| :ref:`πŸ”—` -Searches the array for a value and returns its index or ``-1`` if not found. Optionally, the initial search index can be passed. +Returns the index of the **first** occurrence of ``what`` in this array, or ``-1`` if there are none. The search's start can be specified with ``from``, continuing to the end of the array. + +\ **Note:** If you just want to know whether the array contains ``what``, use :ref:`has` (``Contains`` in C#). In GDScript, you may also use the ``in`` operator. + +\ **Note:** For performance reasons, the search is affected by ``what``'s :ref:`Variant.Type`. For example, ``7`` (:ref:`int`) and ``7.0`` (:ref:`float`) are not considered equal for this method. .. rst-class:: classref-item-separator @@ -703,9 +761,9 @@ Searches the array for a value and returns its index or ``-1`` if not found. Opt :ref:`Variant` **front**\ (\ ) |const| :ref:`πŸ”—` -Returns the first element of the array. Prints an error and returns ``null`` if the array is empty. +Returns the first element of the array. If the array is empty, fails and returns ``null``. See also :ref:`back`. -\ **Note:** Calling this function is not the same as writing ``array[0]``. If the array is empty, accessing by index will pause project execution when running from the editor. +\ **Note:** Unlike with the ``[]`` operator (``array[0]``), an error is generated without stopping project execution. .. rst-class:: classref-item-separator @@ -717,7 +775,7 @@ Returns the first element of the array. Prints an error and returns ``null`` if :ref:`int` **get_typed_builtin**\ (\ ) |const| :ref:`πŸ”—` -Returns the built-in type of the typed array as a :ref:`Variant.Type` constant. If the array is not typed, returns :ref:`@GlobalScope.TYPE_NIL`. +Returns the built-in :ref:`Variant` type of the typed array as a :ref:`Variant.Type` constant. If the array is not typed, returns :ref:`@GlobalScope.TYPE_NIL`. See also :ref:`is_typed`. .. rst-class:: classref-item-separator @@ -729,7 +787,7 @@ Returns the built-in type of the typed array as a :ref:`Variant.Type` **get_typed_class_name**\ (\ ) |const| :ref:`πŸ”—` -Returns the **native** class name of the typed array if the built-in type is :ref:`@GlobalScope.TYPE_OBJECT`. Otherwise, this method returns an empty string. +Returns the **built-in** class name of the typed array, if the built-in :ref:`Variant` type :ref:`@GlobalScope.TYPE_OBJECT`. Otherwise, returns an empty :ref:`StringName`. See also :ref:`is_typed` and :ref:`Object.get_class`. .. rst-class:: classref-item-separator @@ -741,7 +799,7 @@ Returns the **native** class name of the typed array if the built-in type is :re :ref:`Variant` **get_typed_script**\ (\ ) |const| :ref:`πŸ”—` -Returns the script associated with the typed array. This method returns a :ref:`Script` instance or ``null``. +Returns the :ref:`Script` instance associated with this typed array, or ``null`` if it does not exist. See also :ref:`is_typed`. .. rst-class:: classref-item-separator @@ -753,50 +811,37 @@ Returns the script associated with the typed array. This method returns a :ref:` :ref:`bool` **has**\ (\ value\: :ref:`Variant`\ ) |const| :ref:`πŸ”—` -Returns ``true`` if the array contains the given value. +Returns ``true`` if the array contains the given ``value``. .. tabs:: .. code-tab:: gdscript - print(["inside", 7].has("inside")) # True - print(["inside", 7].has("outside")) # False - print(["inside", 7].has(7)) # True - print(["inside", 7].has("7")) # False + print(["inside", 7].has("inside")) # Prints true + print(["inside", 7].has("outside")) # Prints false + print(["inside", 7].has(7)) # Prints true + print(["inside", 7].has("7")) # Prints false .. code-tab:: csharp var arr = new Godot.Collections.Array { "inside", 7 }; - // has is renamed to Contains - GD.Print(arr.Contains("inside")); // True - GD.Print(arr.Contains("outside")); // False - GD.Print(arr.Contains(7)); // True - GD.Print(arr.Contains("7")); // False - - - -\ **Note:** This is equivalent to using the ``in`` operator as follows: - - -.. tabs:: + // By C# convention, this method is renamed to `Contains`. + GD.Print(arr.Contains("inside")); // Prints true + GD.Print(arr.Contains("outside")); // Prints false + GD.Print(arr.Contains(7)); // Prints true + GD.Print(arr.Contains("7")); // Prints false - .. code-tab:: gdscript - # Will evaluate to `true`. - if 2 in [2, 4, 6, 8]: - print("Contains!") - .. code-tab:: csharp +In GDScript, this is equivalent to the ``in`` operator: - // As there is no "in" keyword in C#, you have to use Contains - var array = new Godot.Collections.Array { 2, 4, 6, 8 }; - if (array.Contains(2)) - { - GD.Print("Contains!"); - } +:: + if 4 in [2, 4, 6, 8]: + print("4 is here!") # Will be printed. +\ **Note:** For performance reasons, the search is affected by the ``value``'s :ref:`Variant.Type`. For example, ``7`` (:ref:`int`) and ``7.0`` (:ref:`float`) are not considered equal for this method. .. rst-class:: classref-item-separator @@ -810,7 +855,7 @@ Returns ``true`` if the array contains the given value. Returns a hashed 32-bit integer value representing the array and its contents. -\ **Note:** **Array**\ s with equal content will always produce identical hash values. However, the reverse is not true. Returning identical hash values does *not* imply the arrays are equal, because different arrays can have identical hash values due to hash collisions. +\ **Note:** Arrays with equal hash values are *not* guaranteed to be the same, as a result of hash collisions. On the countrary, arrays with different hash values are guaranteed to be different. .. rst-class:: classref-item-separator @@ -822,11 +867,11 @@ Returns a hashed 32-bit integer value representing the array and its contents. :ref:`int` **insert**\ (\ position\: :ref:`int`, value\: :ref:`Variant`\ ) :ref:`πŸ”—` -Inserts a new element at a given position in the array. The position must be valid, or at the end of the array (``pos == size()``). Returns :ref:`@GlobalScope.OK` on success, or one of the other :ref:`Error` values if the operation failed. +Inserts a new element (``value``) at a given index (``position``) in the array. ``position`` should be between ``0`` and the array's :ref:`size`. -\ **Note:** This method acts in-place and doesn't return a modified array. +Returns :ref:`@GlobalScope.OK` on success, or one of the other :ref:`Error` constants if this method fails. -\ **Note:** On large arrays, this method will be slower if the inserted element is close to the beginning of the array (index 0). This is because all elements placed after the newly inserted element have to be reindexed. +\ **Note:** Every element's index after ``position`` needs to be shifted forward, which may have a noticeable performance cost, especially on larger arrays. .. rst-class:: classref-item-separator @@ -838,7 +883,7 @@ Inserts a new element at a given position in the array. The position must be val :ref:`bool` **is_empty**\ (\ ) |const| :ref:`πŸ”—` -Returns ``true`` if the array is empty. +Returns ``true`` if the array is empty (``[]``). See also :ref:`size`. .. rst-class:: classref-item-separator @@ -850,7 +895,9 @@ Returns ``true`` if the array is empty. :ref:`bool` **is_read_only**\ (\ ) |const| :ref:`πŸ”—` -Returns ``true`` if the array is read-only. See :ref:`make_read_only`. Arrays are automatically read-only if declared with ``const`` keyword. +Returns ``true`` if the array is read-only. See :ref:`make_read_only`. + +In GDScript, arrays are automatically read-only if declared with the ``const`` keyword. .. rst-class:: classref-item-separator @@ -862,7 +909,7 @@ Returns ``true`` if the array is read-only. See :ref:`make_read_only` **is_same_typed**\ (\ array\: :ref:`Array`\ ) |const| :ref:`πŸ”—` -Returns ``true`` if the array is typed the same as ``array``. +Returns ``true`` if this array is typed the same as the given ``array``. See also :ref:`is_typed`. .. rst-class:: classref-item-separator @@ -874,7 +921,14 @@ Returns ``true`` if the array is typed the same as ``array``. :ref:`bool` **is_typed**\ (\ ) |const| :ref:`πŸ”—` -Returns ``true`` if the array is typed. Typed arrays can only store elements of their associated type and provide type safety for the ``[]`` operator. Methods of typed array still return :ref:`Variant`. +Returns ``true`` if the array is typed. Typed arrays can only contain elements of a specific type, as defined by the typed array constructor. The methods of a typed array are still expected to return a generic :ref:`Variant`. + +In GDScript, it is possible to define a typed array with static typing: + +:: + + var numbers: Array[float] = [0.2, 4.2, -2.0] + print(numbers.is_typed()) # Prints true .. rst-class:: classref-item-separator @@ -886,7 +940,9 @@ Returns ``true`` if the array is typed. Typed arrays can only store elements of |void| **make_read_only**\ (\ ) :ref:`πŸ”—` -Makes the array read-only, i.e. disabled modifying of the array's elements. Does not apply to nested content, e.g. content of nested arrays. +Makes the array read-only. The array's elements cannot be overridden with different values, and their order cannot change. Does not apply to nested elements, such as dictionaries. + +In GDScript, arrays are automatically read-only if declared with the ``const`` keyword. .. rst-class:: classref-item-separator @@ -898,18 +954,20 @@ Makes the array read-only, i.e. disabled modifying of the array's elements. Does :ref:`Array` **map**\ (\ method\: :ref:`Callable`\ ) |const| :ref:`πŸ”—` -Calls the provided :ref:`Callable` for each element in the array and returns a new array filled with values returned by the method. +Calls the given :ref:`Callable` for each element in the array and returns a new array filled with values returned by the ``method``. -The callable's method should take one :ref:`Variant` parameter (the current array element) and can return any :ref:`Variant`. +The ``method`` should take one :ref:`Variant` parameter (the current array element) and can return any :ref:`Variant`. :: + func double(number): + return number * 2 + func _ready(): - print([1, 2, 3].map(negate)) # Prints [-1, -2, -3]. - print([1, 2, 3].map(func(number): return -number)) # Same as above, but using lambda function. + print([1, 2, 3].map(double)) # Prints [2, 4, 6] - func negate(number): - return -number + # Same as above, but using a lambda function. + print([1, 2, 3].map(func(element): return element * 2)) See also :ref:`filter`, :ref:`reduce`, :ref:`any` and :ref:`all`. @@ -923,19 +981,9 @@ See also :ref:`filter`, :ref:`reduce` **max**\ (\ ) |const| :ref:`πŸ”—` -Returns the maximum value contained in the array if all elements are of comparable types. If the elements can't be compared, ``null`` is returned. - -To find the maximum value using a custom comparator, you can use :ref:`reduce`. In this example every array element is checked and the first maximum value is returned: - -:: +Returns the maximum value contained in the array, if all elements can be compared. Otherwise, returns ``null``. See also :ref:`min`. - func _ready(): - var arr = [Vector2(0, 1), Vector2(2, 0), Vector2(1, 1), Vector2(1, 0), Vector2(0, 2)] - # In this example we compare the lengths. - print(arr.reduce(func(max, val): return val if is_length_greater(val, max) else max)) - - func is_length_greater(a, b): - return a.length() > b.length() +To find the maximum value using a custom comparator, you can use :ref:`reduce`. .. rst-class:: classref-item-separator @@ -947,9 +995,7 @@ To find the maximum value using a custom comparator, you can use :ref:`reduce` **min**\ (\ ) |const| :ref:`πŸ”—` -Returns the minimum value contained in the array if all elements are of comparable types. If the elements can't be compared, ``null`` is returned. - -See also :ref:`max` for an example of using a custom comparator. +Returns the minimum value contained in the array, if all elements can be compared. Otherwise, returns ``null``. See also :ref:`max`. .. rst-class:: classref-item-separator @@ -961,22 +1007,24 @@ See also :ref:`max` for an example of using a custom com :ref:`Variant` **pick_random**\ (\ ) |const| :ref:`πŸ”—` -Returns a random value from the target array. Prints an error and returns ``null`` if the array is empty. +Returns a random element from the array. Generates an error and returns ``null`` if the array is empty. .. tabs:: .. code-tab:: gdscript - var array: Array[int] = [1, 2, 3, 4] - print(array.pick_random()) # Prints either of the four numbers. + # May print 1, 2, 3.25, or "Hi". + print([1, 2, 3.25, "Hi"].pick_random()) .. code-tab:: csharp - var array = new Godot.Collections.Array { 1, 2, 3, 4 }; - GD.Print(array.PickRandom()); // Prints either of the four numbers. + var array = new Godot.Collections.Array { 1, 2, 3.25f, "Hi" }; + GD.Print(array.PickRandom()); // May print 1, 2, 3.25, or "Hi". + +\ **Note:** Like many similar functions in the engine (such as :ref:`@GlobalScope.randi` or :ref:`shuffle`), this method uses a common, global random seed. To get a predictable outcome from this method, see :ref:`@GlobalScope.seed`. .. rst-class:: classref-item-separator @@ -988,9 +1036,9 @@ Returns a random value from the target array. Prints an error and returns ``null :ref:`Variant` **pop_at**\ (\ position\: :ref:`int`\ ) :ref:`πŸ”—` -Removes and returns the element of the array at index ``position``. If negative, ``position`` is considered relative to the end of the array. Leaves the array unchanged and returns ``null`` if the array is empty or if it's accessed out of bounds. An error message is printed when the array is accessed out of bounds, but not when the array is empty. +Removes and returns the element of the array at index ``position``. If negative, ``position`` is considered relative to the end of the array. Returns ``null`` if the array is empty. If ``position`` is out of bounds, an error message is also generated. -\ **Note:** On large arrays, this method can be slower than :ref:`pop_back` as it will reindex the array's elements that are located after the removed element. The larger the array and the lower the index of the removed element, the slower :ref:`pop_at` will be. +\ **Note:** This method shifts every element's index after ``position`` back, which may have a noticeable performance cost, especially on larger arrays. .. rst-class:: classref-item-separator @@ -1002,7 +1050,7 @@ Removes and returns the element of the array at index ``position``. If negative, :ref:`Variant` **pop_back**\ (\ ) :ref:`πŸ”—` -Removes and returns the last element of the array. Returns ``null`` if the array is empty, without printing an error message. See also :ref:`pop_front`. +Removes and returns the last element of the array. Returns ``null`` if the array is empty, without generating an error. See also :ref:`pop_front`. .. rst-class:: classref-item-separator @@ -1014,9 +1062,9 @@ Removes and returns the last element of the array. Returns ``null`` if the array :ref:`Variant` **pop_front**\ (\ ) :ref:`πŸ”—` -Removes and returns the first element of the array. Returns ``null`` if the array is empty, without printing an error message. See also :ref:`pop_back`. +Removes and returns the first element of the array. Returns ``null`` if the array is empty, without generating an error. See also :ref:`pop_back`. -\ **Note:** On large arrays, this method is much slower than :ref:`pop_back` as it will reindex all the array's elements every time it's called. The larger the array, the slower :ref:`pop_front` will be. +\ **Note:** This method shifts every other element's index back, which may have a noticeable performance cost, especially on larger arrays. .. rst-class:: classref-item-separator @@ -1042,7 +1090,7 @@ Appends an element at the end of the array. See also :ref:`push_front`. -\ **Note:** On large arrays, this method is much slower than :ref:`push_back` as it will reindex all the array's elements every time it's called. The larger the array, the slower :ref:`push_front` will be. +\ **Note:** This method shifts every other element's index forward, which may have a noticeable performance cost, especially on larger arrays. .. rst-class:: classref-item-separator @@ -1054,18 +1102,34 @@ Adds an element at the beginning of the array. See also :ref:`push_back` **reduce**\ (\ method\: :ref:`Callable`, accum\: :ref:`Variant` = null\ ) |const| :ref:`πŸ”—` -Calls the provided :ref:`Callable` for each element in array and accumulates the result in ``accum``. +Calls the given :ref:`Callable` for each element in array, accumulates the result in ``accum``, then returns it. -The callable's method takes two arguments: the current value of ``accum`` and the current array element. If ``accum`` is ``null`` (default value), the iteration will start from the second element, with the first one used as initial value of ``accum``. +The ``method`` takes two arguments: the current value of ``accum`` and the current array element. If ``accum`` is ``null`` (as by default), the iteration will start from the second element, with the first one used as initial value of ``accum``. :: - func _ready(): - print([1, 2, 3].reduce(sum, 10)) # Prints 16. - print([1, 2, 3].reduce(func(accum, number): return accum + number, 10)) # Same as above, but using lambda function. - func sum(accum, number): return accum + number + + func _ready(): + print([1, 2, 3].reduce(sum, 0)) # Prints 6 + print([1, 2, 3].reduce(sum, 10)) # Prints 16 + + # Same as above, but using a lambda function. + print([1, 2, 3].reduce(func(accum, number): return accum + number, 10)) + +If :ref:`max` is not desirable, this method may also be used to implement a custom comparator: + +:: + + func _ready(): + var arr = [Vector2(5, 0), Vector2(3, 4), Vector2(1, 2)] + + var longest_vec = arr.reduce(func(max, vec): return vec if is_length_greater(vec, max) else max) + print(longest_vec) # Prints Vector2(3, 4). + + func is_length_greater(a, b): + return a.length() > b.length() See also :ref:`map`, :ref:`filter`, :ref:`any` and :ref:`all`. @@ -1079,13 +1143,13 @@ See also :ref:`map`, :ref:`filter`\ ) :ref:`πŸ”—` -Removes an element from the array by index. If the index does not exist in the array, nothing happens. To remove an element by searching for its value, use :ref:`erase` instead. +Removes the element from the array at the given index (``position``). If the index is out of bounds, this method fails. -\ **Note:** This method acts in-place and doesn't return a modified array. +If you need to return the removed element, use :ref:`pop_at`. To remove an element by value, use :ref:`erase` instead. -\ **Note:** On large arrays, this method will be slower if the removed element is close to the beginning of the array (index 0). This is because all elements placed after the removed element have to be reindexed. +\ **Note:** This method shifts every element's index after ``position`` back, which may have a noticeable performance cost, especially on larger arrays. -\ **Note:** ``position`` cannot be negative. To remove an element relative to the end of the array, use ``arr.remove_at(arr.size() - (i + 1))``. To remove the last element from the array without returning the value, use ``arr.resize(arr.size() - 1)``. +\ **Note:** The ``position`` cannot be negative. To remove an element relative to the end of the array, use ``arr.remove_at(arr.size() - (i + 1))``. To remove the last element from the array, use ``arr.resize(arr.size() - 1)``. .. rst-class:: classref-item-separator @@ -1097,11 +1161,11 @@ Removes an element from the array by index. If the index does not exist in the a :ref:`int` **resize**\ (\ size\: :ref:`int`\ ) :ref:`πŸ”—` -Resizes the array to contain a different number of elements. If the array size is smaller, elements are cleared, if bigger, new elements are ``null``. Returns :ref:`@GlobalScope.OK` on success, or one of the other :ref:`Error` values if the operation failed. +Sets the array's number of elements to ``size``. If ``size`` is smaller than the array's current size, the elements at the end are removed. If ``size`` is greater, new default elements (usually ``null``) are added, depending on the array's type. -Calling :ref:`resize` once and assigning the new values is faster than adding new elements one by one. +Returns :ref:`@GlobalScope.OK` on success, or one of the other :ref:`Error` constants if this method fails. -\ **Note:** This method acts in-place and doesn't return a modified array. +\ **Note:** Calling this method once and assigning the new values is faster than calling :ref:`append` for every new element. .. rst-class:: classref-item-separator @@ -1113,7 +1177,7 @@ Calling :ref:`resize` once and assigning the new valu |void| **reverse**\ (\ ) :ref:`πŸ”—` -Reverses the order of the elements in the array. +Reverses the order of all elements in the array. .. rst-class:: classref-item-separator @@ -1125,7 +1189,7 @@ Reverses the order of the elements in the array. :ref:`int` **rfind**\ (\ what\: :ref:`Variant`, from\: :ref:`int` = -1\ ) |const| :ref:`πŸ”—` -Searches the array in reverse order. Optionally, a start search index can be passed. If negative, the start index is considered relative to the end of the array. +Returns the index of the **last** occurrence of ``what`` in this array, or ``-1`` if there are none. The search's start can be specified with ``from``, continuing to the beginning of the array. This method is the reverse of :ref:`find`. .. rst-class:: classref-item-separator @@ -1137,7 +1201,9 @@ Searches the array in reverse order. Optionally, a start search index can be pas |void| **shuffle**\ (\ ) :ref:`πŸ”—` -Shuffles the array such that the items will have a random order. This method uses the global random number generator common to methods such as :ref:`@GlobalScope.randi`. Call :ref:`@GlobalScope.randomize` to ensure that a new seed will be used each time if you want non-reproducible shuffling. +Shuffles all elements of the array in a random order. + +\ **Note:** Like many similar functions in the engine (such as :ref:`@GlobalScope.randi` or :ref:`pick_random`), this method uses a common, global random seed. To get a predictable outcome from this method, see :ref:`@GlobalScope.seed`. .. rst-class:: classref-item-separator @@ -1149,7 +1215,7 @@ Shuffles the array such that the items will have a random order. This method use :ref:`int` **size**\ (\ ) |const| :ref:`πŸ”—` -Returns the number of elements in the array. +Returns the number of elements in the array. Empty arrays (``[]``) always return ``0``. See also :ref:`is_empty`. .. rst-class:: classref-item-separator @@ -1161,17 +1227,24 @@ Returns the number of elements in the array. :ref:`Array` **slice**\ (\ begin\: :ref:`int`, end\: :ref:`int` = 2147483647, step\: :ref:`int` = 1, deep\: :ref:`bool` = false\ ) |const| :ref:`πŸ”—` -Returns the slice of the **Array**, from ``begin`` (inclusive) to ``end`` (exclusive), as a new **Array**. +Returns a new **Array** containing this array's elements, from index ``begin`` (inclusive) to ``end`` (exclusive), every ``step`` elements. -The absolute value of ``begin`` and ``end`` will be clamped to the array size, so the default value for ``end`` makes it slice to the size of the array by default (i.e. ``arr.slice(1)`` is a shorthand for ``arr.slice(1, arr.size())``). +If either ``begin`` or ``end`` are negative, their value is relative to the end of the array. -If either ``begin`` or ``end`` are negative, they will be relative to the end of the array (i.e. ``arr.slice(0, -2)`` is a shorthand for ``arr.slice(0, arr.size() - 2)``). +If ``step`` is negative, this method iterates through the array in reverse, returning a slice ordered backwards. For this to work, ``begin`` must be greater than ``end``. -If specified, ``step`` is the relative index between source elements. It can be negative, then ``begin`` must be higher than ``end``. For example, ``[0, 1, 2, 3, 4, 5].slice(5, 1, -2)`` returns ``[5, 3]``. +If ``deep`` is ``true``, all nested **Array** and :ref:`Dictionary` elements in the slice are duplicated from the original, recursively. See also :ref:`duplicate`). -If ``deep`` is true, each element will be copied by value rather than by reference. +:: -\ **Note:** To include the first element when ``step`` is negative, use ``arr.slice(begin, -arr.size() - 1, step)`` (i.e. ``[0, 1, 2].slice(1, -4, -1)`` returns ``[1, 0]``). + var letters = ["A", "B", "C", "D", "E", "F"] + + print(letters.slice(0, 2)) # Prints ["A", "B"] + print(letters.slice(2, -2)) # Prints ["C", "D"] + print(letters.slice(-2, 6)) # Prints ["E", "F"] + + print(letters.slice(0, 6, 2)) # Prints ["A", "C", "E"] + print(letters.slice(4, 1, -1)) # Prints ["E", "D", "C"] .. rst-class:: classref-item-separator @@ -1183,36 +1256,26 @@ If ``deep`` is true, each element will be copied by value rather than by referen |void| **sort**\ (\ ) :ref:`πŸ”—` -Sorts the array. - -\ **Note:** The sorting algorithm used is not `stable `__. This means that values considered equal may have their order changed when using :ref:`sort`. - -\ **Note:** Strings are sorted in alphabetical order (as opposed to natural order). This may lead to unexpected behavior when sorting an array of strings ending with a sequence of numbers. Consider the following example: +Sorts the array in ascending order. The final order is dependent on the "less than" (``>``) comparison between elements. .. tabs:: .. code-tab:: gdscript - var strings = ["string1", "string2", "string10", "string11"] - strings.sort() - print(strings) # Prints [string1, string10, string11, string2] + var numbers = [10, 5, 2.5, 8] + numbers.sort() + print(numbers) # Prints [2.5, 5, 8, 10] .. code-tab:: csharp - var strings = new Godot.Collections.Array { "string1", "string2", "string10", "string11" }; - strings.Sort(); - GD.Print(strings); // Prints [string1, string10, string11, string2] - + var numbers = new Godot.Collections.Array { 10, 5, 2.5, 8 }; + numbers.Sort(); + GD.Print(numbers); // Prints [2.5, 5, 8, 10] -To perform natural order sorting, you can use :ref:`sort_custom` with :ref:`String.naturalnocasecmp_to` as follows: -:: - - var strings = ["string1", "string2", "string10", "string11"] - strings.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0) - print(strings) # Prints [string1, string2, string10, string11] +\ **Note:** The sorting algorithm used is not `stable `__. This means that equivalent elements (such as ``2`` and ``2.0``) may have their order changed when calling :ref:`sort`. .. rst-class:: classref-item-separator @@ -1224,36 +1287,39 @@ To perform natural order sorting, you can use :ref:`sort_custom`\ ) :ref:`πŸ”—` -Sorts the array using a custom method. The custom method receives two arguments (a pair of elements from the array) and must return either ``true`` or ``false``. For two elements ``a`` and ``b``, if the given method returns ``true``, element ``b`` will be after element ``a`` in the array. - -\ **Note:** The sorting algorithm used is not `stable `__. This means that values considered equal may have their order changed when using :ref:`sort_custom`. +Sorts the array using a custom :ref:`Callable`. -\ **Note:** You cannot randomize the return value as the heapsort algorithm expects a deterministic result. Randomizing the return value will result in unexpected behavior. +\ ``func`` is called as many times as necessary, receiving two array elements as arguments. The function should return ``true`` if the first element should be moved *behind* the second one, otherwise it should return ``false``. - -.. tabs:: - - .. code-tab:: gdscript +:: func sort_ascending(a, b): - if a[0] < b[0]: + if a[1] < b[1]: return true return false func _ready(): - var my_items = [[5, "Potato"], [9, "Rice"], [4, "Tomato"]] + var my_items = [["Tomato", 5], ["Apple", 9], ["Rice", 4]] my_items.sort_custom(sort_ascending) - print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]]. + print(my_items) # Prints [["Rice", 4], ["Tomato", 5], ["Apple", 9]] - # Descending, lambda version. + # Sort descending, using a lambda function. my_items.sort_custom(func(a, b): return a[0] > b[0]) - print(my_items) # Prints [[9, Rice], [5, Potato], [4, Tomato]]. + print(my_items) # Prints [["Apple", 9], ["Tomato", 5], ["Rice", 4]] - .. code-tab:: csharp +It may also be necessary to use this method to sort strings by natural order, with :ref:`String.naturalnocasecmp_to`, as in the following example: - // There is no custom sort support for Godot.Collections.Array +:: + var files = ["newfile1", "newfile2", "newfile10", "newfile11"] + files.sort_custom(func(a, b): return a.naturalnocasecmp_to(b) < 0) + print(files) # Prints ["newfile1", "newfile2", "newfile10", "newfile11"] +\ **Note:** In C#, this method is not supported. + +\ **Note:** The sorting algorithm used is not `stable `__. This means that values considered equal may have their order changed when calling this method. + +\ **Note:** You should not randomize the return value of ``func``, as the heapsort algorithm expects a consistent result. Randomizing the return value will result in unexpected behavior. .. rst-class:: classref-section-separator @@ -1270,7 +1336,7 @@ Operator Descriptions :ref:`bool` **operator !=**\ (\ right\: :ref:`Array`\ ) :ref:`πŸ”—` -Compares the left operand **Array** against the ``right`` **Array**. Returns ``true`` if the sizes or contents of the arrays are *not* equal, ``false`` otherwise. +Returns ``true`` if the array's size or its elements are different than ``right``'s. .. rst-class:: classref-item-separator @@ -1282,7 +1348,27 @@ Compares the left operand **Array** against the ``right`` **Array**. Returns ``t :ref:`Array` **operator +**\ (\ right\: :ref:`Array`\ ) :ref:`πŸ”—` -Concatenates two **Array**\ s together, with the ``right`` **Array** being added to the end of the **Array** specified in the left operand. For example, ``[1, 2] + [3, 4]`` results in ``[1, 2, 3, 4]``. +Appends the ``right`` array to the left operand, creating a new **Array**. This is also known as an array concatenation. + + +.. tabs:: + + .. code-tab:: gdscript + + var array1 = ["One", 2] + var array2 = [3, "Four"] + print(array1 + array2) # Prints ["One", 2, 3, "Four"] + + .. code-tab:: csharp + + // Note that concatenation is not possible with C#'s native Array type. + var array1 = new Godot.Collections.Array{"One", 2}; + var array2 = new Godot.Collections.Array{3, "Four"}; + GD.Print(array1 + array2); // Prints ["One", 2, 3, "Four"] + + + +\ **Note:** For existing arrays, :ref:`append_array` is much more efficient than concatenation and assignment with the ``+=`` operator. .. rst-class:: classref-item-separator @@ -1294,7 +1380,9 @@ Concatenates two **Array**\ s together, with the ``right`` **Array** being added :ref:`bool` **operator <**\ (\ right\: :ref:`Array`\ ) :ref:`πŸ”—` -Performs a comparison for each index between the left operand **Array** and the ``right`` **Array**, considering the highest common index of both arrays for this comparison: Returns ``true`` on the first occurrence of an element that is less, or ``false`` if the element is greater. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns ``false`` if the left operand **Array** has fewer elements, otherwise it returns ``true``. +Compares the elements of both arrays in order, starting from index ``0`` and ending on the last index in common between both arrays. For each pair of elements, returns ``true`` if this array's element is less than ``right``'s, ``false`` if this element is greater. Otherwise, continues to the next pair. + +If all searched elements are equal, returns ``true`` if this array's size is less than ``right``'s, otherwise returns ``false``. .. rst-class:: classref-item-separator @@ -1306,7 +1394,9 @@ Performs a comparison for each index between the left operand **Array** and the :ref:`bool` **operator <=**\ (\ right\: :ref:`Array`\ ) :ref:`πŸ”—` -Performs a comparison for each index between the left operand **Array** and the ``right`` **Array**, considering the highest common index of both arrays for this comparison: Returns ``true`` on the first occurrence of an element that is less, or ``false`` if the element is greater. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns ``true`` if the left operand **Array** has the same number of elements or fewer, otherwise it returns ``false``. +Compares the elements of both arrays in order, starting from index ``0`` and ending on the last index in common between both arrays. For each pair of elements, returns ``true`` if this array's element is less than ``right``'s, ``false`` if this element is greater. Otherwise, continues to the next pair. + +If all searched elements are equal, returns ``true`` if this array's size is less or equal to ``right``'s, otherwise returns ``false``. .. rst-class:: classref-item-separator @@ -1330,7 +1420,9 @@ Compares the left operand **Array** against the ``right`` **Array**. Returns ``t :ref:`bool` **operator >**\ (\ right\: :ref:`Array`\ ) :ref:`πŸ”—` -Performs a comparison for each index between the left operand **Array** and the ``right`` **Array**, considering the highest common index of both arrays for this comparison: Returns ``true`` on the first occurrence of an element that is greater, or ``false`` if the element is less. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns ``true`` if the ``right`` **Array** has more elements, otherwise it returns ``false``. +Compares the elements of both arrays in order, starting from index ``0`` and ending on the last index in common between both arrays. For each pair of elements, returns ``true`` if this array's element is greater than ``right``'s, ``false`` if this element is less. Otherwise, continues to the next pair. + +If all searched elements are equal, returns ``true`` if this array's size is greater than ``right``'s, otherwise returns ``false``. .. rst-class:: classref-item-separator @@ -1342,7 +1434,9 @@ Performs a comparison for each index between the left operand **Array** and the :ref:`bool` **operator >=**\ (\ right\: :ref:`Array`\ ) :ref:`πŸ”—` -Performs a comparison for each index between the left operand **Array** and the ``right`` **Array**, considering the highest common index of both arrays for this comparison: Returns ``true`` on the first occurrence of an element that is greater, or ``false`` if the element is less. Note that depending on the type of data stored, this function may be recursive. If all elements are equal, it compares the length of both arrays and returns ``true`` if the ``right`` **Array** has more or the same number of elements, otherwise it returns ``false``. +Compares the elements of both arrays in order, starting from index ``0`` and ending on the last index in common between both arrays. For each pair of elements, returns ``true`` if this array's element is greater than ``right``'s, ``false`` if this element is less. Otherwise, continues to the next pair. + +If all searched elements are equal, returns ``true`` if this array's size is greater or equal to ``right``'s, otherwise returns ``false``. .. rst-class:: classref-item-separator @@ -1354,7 +1448,7 @@ Performs a comparison for each index between the left operand **Array** and the :ref:`Variant` **operator []**\ (\ index\: :ref:`int`\ ) :ref:`πŸ”—` -Returns a reference to the element of type :ref:`Variant` at the specified location. Arrays start at index 0. ``index`` can be a zero or positive value to start from the beginning, or a negative value to start from the end. Out-of-bounds array access causes a run-time error, which will result in an error being printed and the project execution pausing if run from the editor. +Returns the :ref:`Variant` element at the specified ``index``. Arrays start at index 0. If ``index`` is greater or equal to ``0``, the element is fetched starting from the beginning of the array. If ``index`` is a negative value, the element is fetched starting from the end. Accessing an array out-of-bounds will cause a run-time error, pausing the project execution if run from the editor. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_editorexportplatformwindows.rst b/classes/class_editorexportplatformwindows.rst index d87b04a1227..d9041fcafcf 100644 --- a/classes/class_editorexportplatformwindows.rst +++ b/classes/class_editorexportplatformwindows.rst @@ -187,7 +187,7 @@ If set to ``1``, ANGLE libraries are exported with the exported application. If :ref:`int` **application/export_d3d12** :ref:`πŸ”—` -If set to ``1``, Direct3D 12 runtime (DXIL, Agility SDK, PIX) libraries are exported with the exported application. If set to ``0``, Direct3D 12 libraries are exported only if :ref:`ProjectSettings.rendering/rendering_device/driver` is set to ``"d3d12"``. +If set to ``1``, the Direct3D 12 runtime libraries (Agility SDK, PIX) are exported with the exported application. If set to ``0``, Direct3D 12 libraries are exported only if :ref:`ProjectSettings.rendering/rendering_device/driver` is set to ``"d3d12"``. .. rst-class:: classref-item-separator diff --git a/classes/class_os.rst b/classes/class_os.rst index 1eca41e0573..ae8e98be3b2 100644 --- a/classes/class_os.rst +++ b/classes/class_os.rst @@ -829,7 +829,7 @@ Returns the value of the given environment variable, or an empty string if ``var Returns the file path to the current engine executable. -\ **Note:** On macOS, always use :ref:`create_instance` instead of relying on executable path. +\ **Note:** On macOS, if you want to launch another instance of Godot, always use :ref:`create_instance` instead of relying on the executable path. .. rst-class:: classref-item-separator diff --git a/classes/class_physicspointqueryparameters2d.rst b/classes/class_physicspointqueryparameters2d.rst index 0127643629b..6544baca2c6 100644 --- a/classes/class_physicspointqueryparameters2d.rst +++ b/classes/class_physicspointqueryparameters2d.rst @@ -135,6 +135,8 @@ The physics layers the query will detect (as a bitmask). By default, all collisi The list of object :ref:`RID`\ s that will be excluded from collisions. Use :ref:`CollisionObject2D.get_rid` to get the :ref:`RID` associated with a :ref:`CollisionObject2D`-derived node. +\ **Note:** The returned array is copied and any changes to it will not update the original property value. To update the value you need to modify the returned array, and then assign it to the property again. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_physicspointqueryparameters3d.rst b/classes/class_physicspointqueryparameters3d.rst index 2f2765e9c99..321305afa3a 100644 --- a/classes/class_physicspointqueryparameters3d.rst +++ b/classes/class_physicspointqueryparameters3d.rst @@ -114,6 +114,8 @@ The physics layers the query will detect (as a bitmask). By default, all collisi The list of object :ref:`RID`\ s that will be excluded from collisions. Use :ref:`CollisionObject3D.get_rid` to get the :ref:`RID` associated with a :ref:`CollisionObject3D`-derived node. +\ **Note:** The returned array is copied and any changes to it will not update the original property value. To update the value you need to modify the returned array, and then assign it to the property again. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_physicsrayqueryparameters2d.rst b/classes/class_physicsrayqueryparameters2d.rst index 4daa99ecba0..1a8593ffa2f 100644 --- a/classes/class_physicsrayqueryparameters2d.rst +++ b/classes/class_physicsrayqueryparameters2d.rst @@ -130,6 +130,8 @@ The physics layers the query will detect (as a bitmask). By default, all collisi The list of object :ref:`RID`\ s that will be excluded from collisions. Use :ref:`CollisionObject2D.get_rid` to get the :ref:`RID` associated with a :ref:`CollisionObject2D`-derived node. +\ **Note:** The returned array is copied and any changes to it will not update the original property value. To update the value you need to modify the returned array, and then assign it to the property again. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_physicsrayqueryparameters3d.rst b/classes/class_physicsrayqueryparameters3d.rst index e53ca2eb15e..990417768e8 100644 --- a/classes/class_physicsrayqueryparameters3d.rst +++ b/classes/class_physicsrayqueryparameters3d.rst @@ -132,6 +132,8 @@ The physics layers the query will detect (as a bitmask). By default, all collisi The list of object :ref:`RID`\ s that will be excluded from collisions. Use :ref:`CollisionObject3D.get_rid` to get the :ref:`RID` associated with a :ref:`CollisionObject3D`-derived node. +\ **Note:** The returned array is copied and any changes to it will not update the original property value. To update the value you need to modify the returned array, and then assign it to the property again. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_physicsshapequeryparameters2d.rst b/classes/class_physicsshapequeryparameters2d.rst index d374905b937..793282d9723 100644 --- a/classes/class_physicsshapequeryparameters2d.rst +++ b/classes/class_physicsshapequeryparameters2d.rst @@ -122,6 +122,8 @@ The physics layers the query will detect (as a bitmask). By default, all collisi The list of object :ref:`RID`\ s that will be excluded from collisions. Use :ref:`CollisionObject2D.get_rid` to get the :ref:`RID` associated with a :ref:`CollisionObject2D`-derived node. +\ **Note:** The returned array is copied and any changes to it will not update the original property value. To update the value you need to modify the returned array, and then assign it to the property again. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_physicsshapequeryparameters3d.rst b/classes/class_physicsshapequeryparameters3d.rst index 67ae0a513c6..bc2b871df55 100644 --- a/classes/class_physicsshapequeryparameters3d.rst +++ b/classes/class_physicsshapequeryparameters3d.rst @@ -122,6 +122,8 @@ The physics layers the query will detect (as a bitmask). By default, all collisi The list of object :ref:`RID`\ s that will be excluded from collisions. Use :ref:`CollisionObject3D.get_rid` to get the :ref:`RID` associated with a :ref:`CollisionObject3D`-derived node. +\ **Note:** The returned array is copied and any changes to it will not update the original property value. To update the value you need to modify the returned array, and then assign it to the property again. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_popupmenu.rst b/classes/class_popupmenu.rst index 07e5d0822ef..d58bc3a5406 100644 --- a/classes/class_popupmenu.rst +++ b/classes/class_popupmenu.rst @@ -148,6 +148,8 @@ Methods +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_item_shortcut_disabled`\ (\ index\: :ref:`int`\ ) |const| | +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_native_menu`\ (\ ) |const| | + +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_system_menu`\ (\ ) |const| | +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`remove_item`\ (\ index\: :ref:`int`\ ) | @@ -445,6 +447,8 @@ The number of items currently in the list. If ``true``, :ref:`MenuBar` will use native menu when supported. +\ **Note:** If **PopupMenu** is linked to :ref:`StatusIndicator`, :ref:`MenuBar`, or another **PopupMenu** item it can use native menu regardless of this property, use :ref:`is_native_menu` to check it. + .. rst-class:: classref-item-separator ---- @@ -1076,6 +1080,18 @@ Returns ``true`` if the specified item's shortcut is disabled. ---- +.. _class_PopupMenu_method_is_native_menu: + +.. rst-class:: classref-method + +:ref:`bool` **is_native_menu**\ (\ ) |const| :ref:`πŸ”—` + +Returns ``true`` if the system native menu is supported and currently used by this **PopupMenu**. + +.. rst-class:: classref-item-separator + +---- + .. _class_PopupMenu_method_is_system_menu: .. rst-class:: classref-method diff --git a/classes/class_projectsettings.rst b/classes/class_projectsettings.rst index 8ffc466461b..9c12aa19398 100644 --- a/classes/class_projectsettings.rst +++ b/classes/class_projectsettings.rst @@ -279,6 +279,8 @@ Properties +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/settings/profiler/max_functions` | ``16384`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`int` | :ref:`debug/settings/profiler/max_timestamp_query_elements` | ``256`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`debug/settings/stdout/print_fps` | ``false`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`debug/settings/stdout/print_gpu_profile` | ``false`` | @@ -3198,6 +3200,18 @@ Maximum number of functions per frame allowed when profiling. ---- +.. _class_ProjectSettings_property_debug/settings/profiler/max_timestamp_query_elements: + +.. rst-class:: classref-property + +:ref:`int` **debug/settings/profiler/max_timestamp_query_elements** = ``256`` :ref:`πŸ”—` + +Maximum number of timestamp query elements allowed per frame for visual profiling. + +.. rst-class:: classref-item-separator + +---- + .. _class_ProjectSettings_property_debug/settings/stdout/print_fps: .. rst-class:: classref-property @@ -4220,9 +4234,9 @@ Defines how the base size is stretched to fit the resolution of the window or sc \ **"disabled"**: No stretching happens. One unit in the scene corresponds to one pixel on the screen. In this mode, :ref:`display/window/stretch/aspect` has no effect. Recommended for non-game applications. -\ **"canvas_items"**: The base size specified in width and height in the project settings is stretched to cover the whole screen (taking :ref:`display/window/stretch/aspect` into account). This means that everything is rendered directly at the target resolution. 3D is unaffected, while in 2D, there is no longer a 1:1 correspondence between sprite pixels and screen pixels, which may result in scaling artifacts. Recommended for most games that don't use a pixel art esthetic, although it is possible to use this stretch mode for pixel art games too (especially in 3D). +\ **"canvas_items"**: The base size specified in width and height in the project settings is stretched to cover the whole screen (taking :ref:`display/window/stretch/aspect` into account). This means that everything is rendered directly at the target resolution. 3D is unaffected, while in 2D, there is no longer a 1:1 correspondence between sprite pixels and screen pixels, which may result in scaling artifacts. Recommended for most games that don't use a pixel art aesthetic, although it is possible to use this stretch mode for pixel art games too (especially in 3D). -\ **"viewport"**: The size of the root :ref:`Viewport` is set precisely to the base size specified in the Project Settings' Display section. The scene is rendered to this viewport first. Finally, this viewport is scaled to fit the screen (taking :ref:`display/window/stretch/aspect` into account). Recommended for games that use a pixel art esthetic. +\ **"viewport"**: The size of the root :ref:`Viewport` is set precisely to the base size specified in the Project Settings' Display section. The scene is rendered to this viewport first. Finally, this viewport is scaled to fit the screen (taking :ref:`display/window/stretch/aspect` into account). Recommended for games that use a pixel art aesthetic. .. rst-class:: classref-item-separator @@ -4336,9 +4350,11 @@ Changing this value allows setting up a multi-project scenario where there are m :ref:`bool` **editor/export/convert_text_resources_to_binary** = ``true`` :ref:`πŸ”—` -If ``true``, text resources are converted to a binary format on export. This decreases file sizes and speeds up loading slightly. +If ``true``, text resource (``tres``) and text scene (``tscn``) files are converted to their corresponding binary format on export. This decreases file sizes and speeds up loading slightly. + +\ **Note:** Because a resource's file extension may change in an exported project, it is heavily recommended to use :ref:`@GDScript.load` or :ref:`ResourceLoader` instead of :ref:`FileAccess` to load resources dynamically. -\ **Note:** If :ref:`editor/export/convert_text_resources_to_binary` is ``true``, :ref:`@GDScript.load` will not be able to return the converted files in an exported project. Some file paths within the exported PCK will also change, such as ``project.godot`` becoming ``project.binary``. If you rely on run-time loading of files present within the PCK, set :ref:`editor/export/convert_text_resources_to_binary` to ``false``. +\ **Note:** The project settings file (``project.godot``) will always be converted to binary on export, regardless of this setting. .. rst-class:: classref-item-separator diff --git a/classes/class_renderdataextension.rst b/classes/class_renderdataextension.rst index c90e048a60a..b6981ea11f0 100644 --- a/classes/class_renderdataextension.rst +++ b/classes/class_renderdataextension.rst @@ -54,7 +54,7 @@ Method Descriptions :ref:`RID` **_get_camera_attributes**\ (\ ) |virtual| |const| :ref:`πŸ”—` -Implement this in GDExtension to return the :ref:`RID` for the implementations camera attributes object. +Implement this in GDExtension to return the :ref:`RID` for the implementation's camera attributes object. .. rst-class:: classref-item-separator @@ -66,9 +66,7 @@ Implement this in GDExtension to return the :ref:`RID` for the implem :ref:`RID` **_get_environment**\ (\ ) |virtual| |const| :ref:`πŸ”—` -.. container:: contribute - - There is currently no description for this method. Please help us by :ref:`contributing one `! +Implement this in GDExtension to return the :ref:`RID` of the implementation's environment object. .. rst-class:: classref-item-separator @@ -80,7 +78,7 @@ Implement this in GDExtension to return the :ref:`RID` for the implem :ref:`RenderSceneBuffers` **_get_render_scene_buffers**\ (\ ) |virtual| |const| :ref:`πŸ”—` -Implement this in GDExtension to return the :ref:`RID` of the implementations environment object. +Implement this in GDExtension to return the implementation's :ref:`RenderSceneBuffers` object. .. rst-class:: classref-item-separator @@ -92,7 +90,7 @@ Implement this in GDExtension to return the :ref:`RID` of the impleme :ref:`RenderSceneData` **_get_render_scene_data**\ (\ ) |virtual| |const| :ref:`πŸ”—` -Implement this in GDExtension to return the implementations :ref:`RenderSceneDataExtension` object. +Implement this in GDExtension to return the implementation's :ref:`RenderSceneDataExtension` object. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_scripteditorbase.rst b/classes/class_scripteditorbase.rst index 5dcd5fc9175..062c0e7e01f 100644 --- a/classes/class_scripteditorbase.rst +++ b/classes/class_scripteditorbase.rst @@ -144,7 +144,7 @@ Emitted when the user contextual goto and the item is in the same script. .. rst-class:: classref-signal -**request_save_previous_state**\ (\ line\: :ref:`int`\ ) :ref:`πŸ”—` +**request_save_previous_state**\ (\ state\: :ref:`Dictionary`\ ) :ref:`πŸ”—` Emitted when the user changes current script or moves caret by 10 or more columns within the same script. diff --git a/classes/class_transform2d.rst b/classes/class_transform2d.rst index ccf25f0fbbe..476b1c5c006 100644 --- a/classes/class_transform2d.rst +++ b/classes/class_transform2d.rst @@ -17,10 +17,14 @@ A 2Γ—3 matrix representing a 2D transformation. Description ----------- -A 2Γ—3 matrix (2 rows, 3 columns) used for 2D linear transformations. It can represent transformations such as translation, rotation, and scaling. It consists of three :ref:`Vector2` values: :ref:`x`, :ref:`y`, and the :ref:`origin`. +The **Transform2D** built-in :ref:`Variant` type is a 2Γ—3 `matrix `__ representing a transformation in 2D space. It contains three :ref:`Vector2` values: :ref:`x`, :ref:`y`, and :ref:`origin`. Together, they can represent translation, rotation, scale, and skew. + +The :ref:`x` and :ref:`y` axes form a 2Γ—2 matrix, known as the transform's **basis**. The length of each axis (:ref:`Vector2.length`) influences the transform's scale, while the direction of all axes influence the rotation. Usually, both axes are perpendicular to one another. However, when you rotate one axis individually, the transform becomes skewed. Applying a skewed transform to a 2D sprite will make the sprite appear distorted. For a general introduction, see the :doc:`Matrices and transforms <../tutorials/math/matrices_and_transforms>` tutorial. +\ **Note:** Unlike :ref:`Transform3D`, there is no 2D equivalent to the :ref:`Basis` type. All mentions of "basis" refer to the :ref:`x` and :ref:`y` components of **Transform2D**. + .. note:: There are notable differences when using this API with C#. See :ref:`doc_c_sharp_differences` for more information. @@ -173,7 +177,24 @@ Constants **IDENTITY** = ``Transform2D(1, 0, 0, 1, 0, 0)`` :ref:`πŸ”—` -The identity **Transform2D** with no translation, rotation or scaling applied. When applied to other data structures, :ref:`IDENTITY` performs no transformation. +The identity **Transform2D**. A transform with no translation, no rotation, and its scale being ``1``. When multiplied by another :ref:`Variant` such as :ref:`Rect2` or another **Transform2D**, no transformation occurs. This means that: + +- The :ref:`x` points right (:ref:`Vector2.RIGHT`); + +- The :ref:`y` points up (:ref:`Vector2.UP`). + +:: + + var transform = Transform2D.IDENTITY + print("| X | Y | Origin") + print("| %s | %s | %s" % [transform.x.x, transform.y.x, transform.origin.x]) + print("| %s | %s | %s" % [transform.x.y, transform.y.y, transform.origin.y]) + # Prints: + # | X | Y | Origin + # | 1 | 0 | 0 + # | 0 | 1 | 0 + +This is identical to creating :ref:`Transform2D` without any parameters. This constant can be used to make your code clearer, and for consistency with C#. .. _class_Transform2D_constant_FLIP_X: @@ -181,7 +202,9 @@ The identity **Transform2D** with no translation, rotation or scaling applied. W **FLIP_X** = ``Transform2D(-1, 0, 0, 1, 0, 0)`` :ref:`πŸ”—` -The **Transform2D** that will flip something along the X axis. +When any transform is multiplied by :ref:`FLIP_X`, it negates all components of the :ref:`x` axis (the X column). + +When :ref:`FLIP_X` is multiplied by any basis, it negates the :ref:`Vector2.x` component of all axes (the X row). .. _class_Transform2D_constant_FLIP_Y: @@ -189,7 +212,9 @@ The **Transform2D** that will flip something along the X axis. **FLIP_Y** = ``Transform2D(1, 0, 0, -1, 0, 0)`` :ref:`πŸ”—` -The **Transform2D** that will flip something along the Y axis. +When any transform is multiplied by :ref:`FLIP_Y`, it negates all components of the :ref:`y` axis (the Y column). + +When :ref:`FLIP_Y` is multiplied by any basis, it negates the :ref:`Vector2.y` component of all axes (the Y row). .. rst-class:: classref-section-separator @@ -206,7 +231,7 @@ Property Descriptions :ref:`Vector2` **origin** = ``Vector2(0, 0)`` :ref:`πŸ”—` -The origin vector (column 2, the third column). Equivalent to array index ``2``. The origin vector represents translation. +The translation offset of this transform, and the column ``2`` of the matrix. In 2D space, this can be seen as the position. .. rst-class:: classref-item-separator @@ -218,7 +243,9 @@ The origin vector (column 2, the third column). Equivalent to array index ``2``. :ref:`Vector2` **x** = ``Vector2(1, 0)`` :ref:`πŸ”—` -The basis matrix's X vector (column 0). Equivalent to array index ``0``. +The transform basis's X axis, and the column ``0`` of the matrix. Combined with :ref:`y`, this represents the transform's rotation, scale, and skew. + +On the identity transform, this vector points right (:ref:`Vector2.RIGHT`). .. rst-class:: classref-item-separator @@ -230,7 +257,9 @@ The basis matrix's X vector (column 0). Equivalent to array index ``0``. :ref:`Vector2` **y** = ``Vector2(0, 1)`` :ref:`πŸ”—` -The basis matrix's Y vector (column 1). Equivalent to array index ``1``. +The transform basis's Y axis, and the column ``1`` of the matrix. Combined with :ref:`x`, this represents the transform's rotation, scale, and skew. + +On the identity transform, this vector points up (:ref:`Vector2.UP`). .. rst-class:: classref-section-separator @@ -247,7 +276,7 @@ Constructor Descriptions :ref:`Transform2D` **Transform2D**\ (\ ) :ref:`πŸ”—` -Constructs a default-initialized **Transform2D** set to :ref:`IDENTITY`. +Constructs a **Transform2D** identical to :ref:`IDENTITY`. .. rst-class:: classref-item-separator @@ -267,7 +296,7 @@ Constructs a **Transform2D** as a copy of the given **Transform2D**. :ref:`Transform2D` **Transform2D**\ (\ rotation\: :ref:`float`, position\: :ref:`Vector2`\ ) -Constructs the transform from a given angle (in radians) and position. +Constructs a **Transform2D** from a given angle (in radians) and position. .. rst-class:: classref-item-separator @@ -277,7 +306,7 @@ Constructs the transform from a given angle (in radians) and position. :ref:`Transform2D` **Transform2D**\ (\ rotation\: :ref:`float`, scale\: :ref:`Vector2`, skew\: :ref:`float`, position\: :ref:`Vector2`\ ) -Constructs the transform from a given angle (in radians), scale, skew (in radians) and position. +Constructs a **Transform2D** from a given angle (in radians), scale, skew (in radians), and position. .. rst-class:: classref-item-separator @@ -287,7 +316,7 @@ Constructs the transform from a given angle (in radians), scale, skew (in radian :ref:`Transform2D` **Transform2D**\ (\ x_axis\: :ref:`Vector2`, y_axis\: :ref:`Vector2`, origin\: :ref:`Vector2`\ ) -Constructs the transform from 3 :ref:`Vector2` values representing :ref:`x`, :ref:`y`, and the :ref:`origin` (the three column vectors). +Constructs a **Transform2D** from 3 :ref:`Vector2` values representing :ref:`x`, :ref:`y`, and the :ref:`origin` (the three matrix columns). .. rst-class:: classref-section-separator @@ -304,7 +333,9 @@ Method Descriptions :ref:`Transform2D` **affine_inverse**\ (\ ) |const| :ref:`πŸ”—` -Returns the inverse of the transform, under the assumption that the basis is invertible (must have non-zero determinant). +Returns the inverted version of this transform. Unlike :ref:`inverse`, this method works with almost any basis, including non-uniform ones, but is slower. See also :ref:`inverse`. + +\ **Note:** For this method to return correctly, the transform's basis needs to have a determinant that is not exactly ``0`` (see :ref:`determinant`). .. rst-class:: classref-item-separator @@ -316,9 +347,7 @@ Returns the inverse of the transform, under the assumption that the basis is inv :ref:`Vector2` **basis_xform**\ (\ v\: :ref:`Vector2`\ ) |const| :ref:`πŸ”—` -Returns a vector transformed (multiplied) by the basis matrix. - -This method does not account for translation (the :ref:`origin` vector). +Returns a copy of the ``v`` vector, transformed (multiplied) by the transform basis's matrix. Unlike the multiplication operator (``*``), this method ignores the :ref:`origin`. .. rst-class:: classref-item-separator @@ -330,13 +359,9 @@ This method does not account for translation (the :ref:`origin` **basis_xform_inv**\ (\ v\: :ref:`Vector2`\ ) |const| :ref:`πŸ”—` -Returns a vector transformed (multiplied) by the inverse basis matrix, under the assumption that the basis is orthonormal (i.e. rotation/reflection is fine, scaling/skew is not). - -This method does not account for translation (the :ref:`origin` vector). +Returns a copy of the ``v`` vector, transformed (multiplied) by the inverse transform basis's matrix (see :ref:`inverse`). This method ignores the :ref:`origin`. -\ ``transform.basis_xform_inv(vector)`` is equivalent to ``transform.inverse().basis_xform(vector)``. See :ref:`inverse`. - -For non-orthonormal transforms (e.g. with scaling) ``transform.affine_inverse().basis_xform(vector)`` can be used instead. See :ref:`affine_inverse`. +\ **Note:** This method assumes that this transform's basis is *orthonormal* (see :ref:`orthonormalized`). If the basis is not orthonormal, ``transform.affine_inverse().basis_xform(vector)`` should be used instead (see :ref:`affine_inverse`). .. rst-class:: classref-item-separator @@ -348,9 +373,13 @@ For non-orthonormal transforms (e.g. with scaling) ``transform.affine_inverse(). :ref:`float` **determinant**\ (\ ) |const| :ref:`πŸ”—` -Returns the determinant of the basis matrix. If the basis is uniformly scaled, then its determinant equals the square of the scale factor. +Returns the `determinant `__ of this transform basis's matrix. For advanced math, this number can be used to determine a few attributes: + +- If the determinant is exactly ``0``, the basis is not invertible (see :ref:`inverse`). -A negative determinant means the basis was flipped, so one part of the scale is negative. A zero determinant means the basis isn't invertible, and is usually considered invalid. +- If the determinant is a negative number, the basis represents a negative scale. + +\ **Note:** If the basis's scale is the same for every axis, its determinant is always that scale by the power of 2. .. rst-class:: classref-item-separator @@ -362,7 +391,7 @@ A negative determinant means the basis was flipped, so one part of the scale is :ref:`Vector2` **get_origin**\ (\ ) |const| :ref:`πŸ”—` -Returns the transform's origin (translation). +Returns this transform's translation. Equivalent to :ref:`origin`. .. rst-class:: classref-item-separator @@ -374,7 +403,7 @@ Returns the transform's origin (translation). :ref:`float` **get_rotation**\ (\ ) |const| :ref:`πŸ”—` -Returns the transform's rotation (in radians). +Returns this transform's rotation (in radians). This is equivalent to :ref:`x`'s angle (see :ref:`Vector2.angle`). .. rst-class:: classref-item-separator @@ -386,7 +415,38 @@ Returns the transform's rotation (in radians). :ref:`Vector2` **get_scale**\ (\ ) |const| :ref:`πŸ”—` -Returns the scale. +Returns the length of both :ref:`x` and :ref:`y`, as a :ref:`Vector2`. If this transform's basis is not skewed, this value is the scaling factor. It is not affected by rotation. + + +.. tabs:: + + .. code-tab:: gdscript + + var my_transform = Transform2D( + Vector2(2, 0), + Vector2(0, 4), + Vector2(0, 0) + ) + # Rotating the Transform2D in any way preserves its scale. + my_transform = my_transform.rotated(TAU / 2) + + print(my_transform.get_scale()) # Prints (2, 4). + + .. code-tab:: csharp + + var myTransform = new Transform2D( + Vector3(2.0f, 0.0f), + Vector3(0.0f, 4.0f), + Vector3(0.0f, 0.0f) + ); + // Rotating the Transform2D in any way preserves its scale. + myTransform = myTransform.Rotated(Mathf.Tau / 2.0f); + + GD.Print(myTransform.GetScale()); // Prints (2, 4, 8). + + + +\ **Note:** If the value returned by :ref:`determinant` is negative, the scale is also negative. .. rst-class:: classref-item-separator @@ -398,7 +458,7 @@ Returns the scale. :ref:`float` **get_skew**\ (\ ) |const| :ref:`πŸ”—` -Returns the transform's skew (in radians). +Returns this transform's skew (in radians). .. rst-class:: classref-item-separator @@ -410,7 +470,9 @@ Returns the transform's skew (in radians). :ref:`Transform2D` **interpolate_with**\ (\ xform\: :ref:`Transform2D`, weight\: :ref:`float`\ ) |const| :ref:`πŸ”—` -Returns a transform interpolated between this transform and another by a given ``weight`` (on the range of 0.0 to 1.0). +Returns the result of the linear interpolation between this transform and ``xform`` by the given ``weight``. + +The ``weight`` should be between ``0.0`` and ``1.0`` (inclusive). Values outside this range are allowed and can be used to perform *extrapolation* instead. .. rst-class:: classref-item-separator @@ -422,7 +484,9 @@ Returns a transform interpolated between this transform and another by a given ` :ref:`Transform2D` **inverse**\ (\ ) |const| :ref:`πŸ”—` -Returns the inverse of the transform, under the assumption that the transformation basis is orthonormal (i.e. rotation/reflection is fine, scaling/skew is not). Use :ref:`affine_inverse` for non-orthonormal transforms (e.g. with scaling). +Returns the `inverted version of this transform `__. + +\ **Note:** For this method to return correctly, the transform's basis needs to be *orthonormal* (see :ref:`orthonormalized`). That means, the basis should only represent a rotation. If it does not, use :ref:`affine_inverse` instead. .. rst-class:: classref-item-separator @@ -434,7 +498,7 @@ Returns the inverse of the transform, under the assumption that the transformati :ref:`bool` **is_conformal**\ (\ ) |const| :ref:`πŸ”—` -Returns ``true`` if the transform's basis is conformal, meaning it preserves angles and distance ratios, and may only be composed of rotation and uniform scale. Returns ``false`` if the transform's basis has non-uniform scale or shear/skew. This can be used to validate if the transform is non-distorted, which is important for physics and other use cases. +Returns ``true`` if this transform's basis is conformal. A conformal basis is both *orthogonal* (the axes are perpendicular to each other) and *uniform* (the axes share the same length). This method can be especially useful during physics calculations. .. rst-class:: classref-item-separator @@ -470,9 +534,7 @@ Returns ``true`` if this transform is finite, by calling :ref:`@GlobalScope.is_f :ref:`Transform2D` **looking_at**\ (\ target\: :ref:`Vector2` = Vector2(0, 0)\ ) |const| :ref:`πŸ”—` -Returns a copy of the transform rotated such that the rotated X-axis points towards the ``target`` position. - -Operations take place in global space. +Returns a copy of the transform rotated such that the rotated X-axis points towards the ``target`` position, in global space. .. rst-class:: classref-item-separator @@ -484,7 +546,7 @@ Operations take place in global space. :ref:`Transform2D` **orthonormalized**\ (\ ) |const| :ref:`πŸ”—` -Returns the transform with the basis orthogonal (90 degrees), and normalized axis vectors (scale of 1 or -1). +Returns a copy of this transform with its basis orthonormalized. An orthonormal basis is both *orthogonal* (the axes are perpendicular to each other) and *normalized* (the axes have a length of ``1``), which also means it can only represent rotation. .. rst-class:: classref-item-separator @@ -597,7 +659,7 @@ Operator Descriptions :ref:`bool` **operator !=**\ (\ right\: :ref:`Transform2D`\ ) :ref:`πŸ”—` -Returns ``true`` if the transforms are not equal. +Returns ``true`` if the components of both transforms are not equal. \ **Note:** Due to floating-point precision errors, consider using :ref:`is_equal_approx` instead, which is more reliable. @@ -611,7 +673,9 @@ Returns ``true`` if the transforms are not equal. :ref:`PackedVector2Array` **operator ***\ (\ right\: :ref:`PackedVector2Array`\ ) :ref:`πŸ”—` -Transforms (multiplies) each element of the :ref:`Vector2` array by the given **Transform2D** matrix. +Transforms (multiplies) every :ref:`Vector2` element of the given :ref:`PackedVector2Array` by this transformation matrix. + +On larger arrays, this operation is much faster than transforming each :ref:`Vector2` individually. .. rst-class:: classref-item-separator @@ -623,7 +687,7 @@ Transforms (multiplies) each element of the :ref:`Vector2` array :ref:`Rect2` **operator ***\ (\ right\: :ref:`Rect2`\ ) :ref:`πŸ”—` -Transforms (multiplies) the :ref:`Rect2` by the given **Transform2D** matrix. +Transforms (multiplies) the :ref:`Rect2` by this transformation matrix. .. rst-class:: classref-item-separator @@ -635,7 +699,17 @@ Transforms (multiplies) the :ref:`Rect2` by the given **Transform2D :ref:`Transform2D` **operator ***\ (\ right\: :ref:`Transform2D`\ ) :ref:`πŸ”—` -Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent). +Transforms (multiplies) this transform by the ``right`` transform. + +This is the operation performed between parent and child :ref:`CanvasItem` nodes. + +\ **Note:** If you need to only modify one attribute of this transform, consider using one of the following methods, instead: + +- For translation, see :ref:`translated` or :ref:`translated_local`. + +- For rotation, see :ref:`rotated` or :ref:`rotated_local`. + +- For scale, see :ref:`scaled` or :ref:`scaled_local`. .. rst-class:: classref-item-separator @@ -647,7 +721,7 @@ Composes these two transformation matrices by multiplying them together. This ha :ref:`Vector2` **operator ***\ (\ right\: :ref:`Vector2`\ ) :ref:`πŸ”—` -Transforms (multiplies) the :ref:`Vector2` by the given **Transform2D** matrix. +Transforms (multiplies) the :ref:`Vector2` by this transformation matrix. .. rst-class:: classref-item-separator @@ -659,7 +733,7 @@ Transforms (multiplies) the :ref:`Vector2` by the given **Transfo :ref:`Transform2D` **operator ***\ (\ right\: :ref:`float`\ ) :ref:`πŸ”—` -This operator multiplies all components of the **Transform2D**, including the :ref:`origin` vector, which scales it uniformly. +Multiplies all components of the **Transform2D** by the given :ref:`float`, including the :ref:`origin`. This affects the transform's scale uniformly. .. rst-class:: classref-item-separator @@ -671,7 +745,7 @@ This operator multiplies all components of the **Transform2D**, including the :r :ref:`Transform2D` **operator ***\ (\ right\: :ref:`int`\ ) :ref:`πŸ”—` -This operator multiplies all components of the **Transform2D**, including the :ref:`origin` vector, which scales it uniformly. +Multiplies all components of the **Transform2D** by the given :ref:`int`, including the :ref:`origin`. This affects the transform's scale uniformly. .. rst-class:: classref-item-separator @@ -683,7 +757,7 @@ This operator multiplies all components of the **Transform2D**, including the :r :ref:`Transform2D` **operator /**\ (\ right\: :ref:`float`\ ) :ref:`πŸ”—` -This operator divides all components of the **Transform2D**, including the :ref:`origin` vector, which inversely scales it uniformly. +Divides all components of the **Transform2D** by the given :ref:`float`, including the :ref:`origin`. This affects the transform's scale uniformly. .. rst-class:: classref-item-separator @@ -695,7 +769,7 @@ This operator divides all components of the **Transform2D**, including the :ref: :ref:`Transform2D` **operator /**\ (\ right\: :ref:`int`\ ) :ref:`πŸ”—` -This operator divides all components of the **Transform2D**, including the :ref:`origin` vector, which inversely scales it uniformly. +Divides all components of the **Transform2D** by the given :ref:`int`, including the :ref:`origin`. This affects the transform's scale uniformly. .. rst-class:: classref-item-separator @@ -707,7 +781,7 @@ This operator divides all components of the **Transform2D**, including the :ref: :ref:`bool` **operator ==**\ (\ right\: :ref:`Transform2D`\ ) :ref:`πŸ”—` -Returns ``true`` if the transforms are exactly equal. +Returns ``true`` if the components of both transforms are exactly equal. \ **Note:** Due to floating-point precision errors, consider using :ref:`is_equal_approx` instead, which is more reliable. @@ -721,7 +795,7 @@ Returns ``true`` if the transforms are exactly equal. :ref:`Vector2` **operator []**\ (\ index\: :ref:`int`\ ) :ref:`πŸ”—` -Access transform components using their index. ``t[0]`` is equivalent to ``t.x``, ``t[1]`` is equivalent to ``t.y``, and ``t[2]`` is equivalent to ``t.origin``. +Accesses each axis (column) of this transform by their index. Index ``0`` is the same as :ref:`x`, index ``1`` is the same as :ref:`y`, and index ``2`` is the same as :ref:`origin`. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_xrinterface.rst b/classes/class_xrinterface.rst index ce3e8e907a7..6b0dcdc5a70 100644 --- a/classes/class_xrinterface.rst +++ b/classes/class_xrinterface.rst @@ -704,6 +704,14 @@ Triggers a haptic pulse on a device associated with this interface. \ ``tracker_name`` is optional and can be used to direct the pulse to a specific device provided that device is bound to this haptic. +\ ``frequency`` is the frequency of the pulse, set to ``0.0`` to have the system use a default frequency. + +\ ``amplitude`` is the amplitude of the pulse between ``0.0`` and ``1.0``. + +\ ``duration_sec`` is the duration of the pulse in seconds. + +\ ``delay_sec`` is a delay in seconds before the pulse is given. + .. rst-class:: classref-item-separator ---- diff --git a/classes/class_xrnode3d.rst b/classes/class_xrnode3d.rst index 675e6db7b89..e6a0642610b 100644 --- a/classes/class_xrnode3d.rst +++ b/classes/class_xrnode3d.rst @@ -196,6 +196,14 @@ Triggers a haptic pulse on a device associated with this interface. \ ``action_name`` is the name of the action for this pulse. +\ ``frequency`` is the frequency of the pulse, set to ``0.0`` to have the system use a default frequency. + +\ ``amplitude`` is the amplitude of the pulse between ``0.0`` and ``1.0``. + +\ ``duration_sec`` is the duration of the pulse in seconds. + +\ ``delay_sec`` is a delay in seconds before the pulse is given. + .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` From 40020ca9a414584f2bf38f506fe8a0a314f2994d Mon Sep 17 00:00:00 2001 From: Hana - Piralein <48352564+Piralein@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:39:05 +0200 Subject: [PATCH 023/122] Adding "Using System;" line to default C# script Co-Authored-By: Bryan Gillis <7204836+brgillis@users.noreply.github.com> --- getting_started/step_by_step/scripting_first_script.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/getting_started/step_by_step/scripting_first_script.rst b/getting_started/step_by_step/scripting_first_script.rst index 66e2129990c..9c2bcc9a880 100644 --- a/getting_started/step_by_step/scripting_first_script.rst +++ b/getting_started/step_by_step/scripting_first_script.rst @@ -101,7 +101,8 @@ the following line of code: .. code-tab:: csharp C# using Godot; - + using System; + public partial class MySprite2D : Sprite2D { } @@ -327,7 +328,8 @@ Here is the complete ``sprite_2d.gd`` file for reference. .. code-tab:: csharp C# using Godot; - + using System; + public partial class MySprite2D : Sprite2D { private int _speed = 400; From 385e2096313a11a90111d29d1d80479ff79b0f31 Mon Sep 17 00:00:00 2001 From: Hana - Piralein <48352564+Piralein@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:45:02 +0200 Subject: [PATCH 024/122] Add description for custom vertex values Co-Authored-By: Clay John --- tutorials/shaders/shader_reference/canvas_item_shader.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/shaders/shader_reference/canvas_item_shader.rst b/tutorials/shaders/shader_reference/canvas_item_shader.rst index 3aa5c5d6127..48c26428307 100644 --- a/tutorials/shaders/shader_reference/canvas_item_shader.rst +++ b/tutorials/shaders/shader_reference/canvas_item_shader.rst @@ -132,9 +132,9 @@ is usually: +--------------------------------+----------------------------------------------------+ | inout float **POINT_SIZE** | Point size for point drawing. | +--------------------------------+----------------------------------------------------+ -| in vec4 **CUSTOM0** | | +| in vec4 **CUSTOM0** | Custom value from vertex primitive. | +--------------------------------+----------------------------------------------------+ -| in vec4 **CUSTOM1** | | +| in vec4 **CUSTOM1** | Custom value from vertex primitive. | +--------------------------------+----------------------------------------------------+ Fragment built-ins From 4d5564562337c6d766b0196e933a7fa50a7b0e2e Mon Sep 17 00:00:00 2001 From: Bastiaan Olij Date: Tue, 18 Jun 2024 00:15:46 +1000 Subject: [PATCH 025/122] Rewrite OpenXR hand tracking to reflect new architecture --- .../img/openxr_enable_hand_tracking_meta.webp | Bin 0 -> 36402 bytes .../img/openxr_hand_interaction_profile.webp | Bin 0 -> 18504 bytes tutorials/xr/img/openxr_hand_skeleton.webp | Bin 58240 -> 0 bytes .../xr/img/openxr_hand_tracking_nodes.webp | Bin 0 -> 63642 bytes .../openxr_htc_hand_interaction_profile.webp | Bin 0 -> 15548 bytes .../openxr_msft_hand_interaction_profile.webp | Bin 0 -> 17076 bytes .../xr/img/openxr_simple_controller_hand.webp | Bin 0 -> 16410 bytes tutorials/xr/img/xr_enable_handtracking.webp | Bin 3750 -> 36954 bytes tutorials/xr/index.rst | 1 + tutorials/xr/openxr_body_tracking.rst | 38 ++ tutorials/xr/openxr_hand_tracking.rst | 518 ++++++++++++------ 11 files changed, 375 insertions(+), 182 deletions(-) create mode 100644 tutorials/xr/img/openxr_enable_hand_tracking_meta.webp create mode 100644 tutorials/xr/img/openxr_hand_interaction_profile.webp delete mode 100644 tutorials/xr/img/openxr_hand_skeleton.webp create mode 100644 tutorials/xr/img/openxr_hand_tracking_nodes.webp create mode 100644 tutorials/xr/img/openxr_htc_hand_interaction_profile.webp create mode 100644 tutorials/xr/img/openxr_msft_hand_interaction_profile.webp create mode 100644 tutorials/xr/img/openxr_simple_controller_hand.webp create mode 100644 tutorials/xr/openxr_body_tracking.rst diff --git a/tutorials/xr/img/openxr_enable_hand_tracking_meta.webp b/tutorials/xr/img/openxr_enable_hand_tracking_meta.webp new file mode 100644 index 0000000000000000000000000000000000000000..1d1860a1f11a46a4f2aee677ee66771d27ebc7f8 GIT binary patch literal 36402 zcmV(_K-9ldNk&F0jsO5xMM6+kP&iB-jsO5J`9pmGjX-YONRR}3=U(#VA8=RKbk`&h z(fw^)**-rb_x$hMtkF`-5^sQ)hTkde#%4oGF+>;D9pe1P*8 z<-rI84JJ#&pBJ!5Ak76p=|Oc)2ysy^iqHg*D|^g5w>ODxhi{898-pJ#E*7x(U{xkv zodAVM5Hz9~qj4CUuDn&=Sd}*xi^XO+a+3fAxd2iFutT#_r};N`^NcWmIH31>`eh^t z1d#AV1F(KN%rL`zo7Y!P_RsNk&dw185GiheLP8LbLV}1$h+hB%LWtc#g}}MOTY-bW zpdoKJI4cs1P*(kgx#} zDGDg05D<}p6h#q5zp4NL0qHw0$d#vm;rKhkF$-#OAweVrQE^v+$L;34J4T@>9bh9@ z1vWTNFi;R_@`T7mAu?zH z0G?z+iG&bP3wJ~!MksC&5d}7am?n@Ao(K?ujiQkn5s?jQa>pNuCqlIY44w!fG?z*c z#5P;of?^|^MnY3|C`_V=`UZ-Haoa|Yr2fm^=$Q-Oh?oEbyE2uotJ|8ZY_>#LeKC=~ zA_!`erOQSrQ3br>2$-6lNqskmeYM1W$CO}zAx%~aoF08~Pa8a~6=S@rYOiPX$o$a{ zwK*Q}|DSiKZM6UYEYi`w?;Bc?ge1@|#0~-^v9B^nVlk`1fH9j`#J=zQz6gm$LhOr# zB($M@-_d@w9~~`ck#shl<^ErnxbOeDCFCQ{xoh)|ogvMTObj)X=rT>6vE{}yq{u^L zI_}>sv^ULNckI(M*tFRbV#u5_Vr=n98m*=g9~= zH&5+r?Bw-8y&Kxhcsk(Gct2>0D{v%Tj~3t6yj z)rqtZOvm?uc4E{-uYmnw3)*%?l9Y2!o~*2@9&H=h?dfr!b$54ncQ+ia{L0!T`R07f?Joy z-QDX3hbw0-f);Gsrfp|pVV`{upKZSv+qP}nw(aE4wrxB4vTZv@cb~o1nv;?vNsc5* z)jXTba?bw$u076;^XaZ|3rK9+NRs5#Orf#WnERe7Z9f+QpaFqO0tkL$dPwVXOn6i# zKbXxJ`3kf8;K}pnXZ`CZ-bD@Y0FSU#svzVM5rG@A0ib~`qC0lI_ufu$OQylh)>~b@ zdeifzwW#@n(?0Mp+MsWjoqGRXv%NHy0tm5034p)+Y7$CJCuVN}q{92+BG?5X1S5Gr zEMZ^yN-%(tOiC1{77_uW7TnPry>xC3lM)BB^oqfw=Yf~M9D}ZhQn^Op?wr0dCMF@yv_^+>)T$uK!-A;;1=kJUN{CL!cMOO3s8s9c}cLNQTq7|0dy+fDgO>^Z)en zFYl*55KZcB_`h$u)_!Guh(Q{|m zKfgJDC;9w!_P_u4R6iyZAi7GM)BW~yhurL1W*d4kYmWec(*n5wvD+H=kVMj1pxi2 zh5?R{UsdJOiKi#)y4h^ESTy8&klLwBs1a@TMV= zFIWVx7C&$G*}nJEa|e>9Ui1(#7scFduf41nFN~WmT&75gTX^Yf`s4k#aN#-e_SYGV zcVJ2Pdggh?=8rV|D`HBI0UF!>e?C4zLR6?k6yMG6!PA+~7z+0pU5+9>^L4K)`2Q0B zZRp)Rk5HhIxJ4tvtnMUZZ_-BcSn}~4aK(?l6eqyvA0iQMgdcqfEgl*I!yFUFzf%h@ zOc+hhh|AMW#7{eZKDqaV#6NinCLulzU=(w1l(bm1(*vM=JZiUH$8q+ihn*E{>$%8zQ0M|`hU{*gYs0tlj?OjMs`mL>58y= zF6X9v|6pytKjQl%6r{Pfk#2;C;6b=Oq0*Q81SS&Ek_OH0YO176eNLY62olGYB1&$UqS0*2T<}y_uevV%f;fgl#)6LB3aZ;#f`^L8`tL+29!a;jun#*F;cMw$s1=EE07-lez)^h_1-UZg#-wMZMp z6Iy;_CF~=Cx)S@sGVA0#2os4DxhumU6qtfV%Ye+%i-k}oDp)`Xeqve|GgGl|fbr^d z;ZAjjhBC5O>?|WSYK3yK_Zlz@*6zEn>7G#lAk+i^7GrqmNKgOA7i*v0(yip^nLxY| zvIzM?JXrPg?dHsuPYN|=6oBYsk-pjX5|%e_2lw5V$fd0oYnja#HmK|E~Rrb@=!WSCovbgE-qbMP~bW56^1C%w%v$#wT;OfV5Z=hh{Z ziJ)@<3ZYBVp{Rw4ik7#Fv1d0sb=`a7xIBObLM=MSLYlLT^eeUhb4%%c0Ui*0{OJ*s zdQckgy-UV}c)|il@}WvTi#Utf8jepWfN3N6O$SXgRPtQIJQd@2wu0YW0M{4kjcspy zop~A}Yu^vIWcsA(P^=m~IrEyKDY3rhHA%A`Z5k0QRdv$DP1f70&17Ty#&oxuR;RtN z+?}hlFNu!DF&l5RN&h;#(R_+`BEx?q$ zAwitZ)c3i_1Ze~I$pPr%E;(JG?lTR{?4X2s#{Kq zAT{;|uvqfW#k<(&yo*)(=9qRi{d@Vyv!=V}8Gv2q6Qge{h-BvE5T<9WIdaUW3w2_? zI!3ZP<7t+q4BxcKjP)NY@Mibp$PIQfWMc4gaa9GIerO5zPF`D|g=LYF?hD^`;g!-r z61p(W&kFRJrHM7~8 z+a|H!48)x-iL8j-6ZUWr5P*NG3~;4Q@A76C1SUr$pR+7dl8bmqKn7%669lI$5Bch#a%M%d4Q?~E0xxKkbx$)yQ zx@R(}v6(-H-<_CIh(+i|s%8Q*w$7A`tIUpip3& z;O&A`3>QoSCMeaiyB4v0saB?Thl{CX8i{EOj%Jgs>z)1b zB;;(X4>0>M?uE1xjou5h$%!3huKxt^Cj_b&s?E{ek9+j9Wv)_X_mi_72H>6JYD_yv z&Z!=@oSb~^o7z#u8p|2~@PA$oPH@U`PE$q^0${v`Q7mx%Y5fv&Fr+iZGOO>xGz}=X z@yBWyoIAZ#_?cdA>M6jK#>}3XqJ4AHrT9^AzExr_p8haBA+8-JAZ?#GIo~EAae$uz zn`ROSNkB0A%d^i{FKgof_}4l5e$5Zf#p!V$rB-%BI*)z!bO@5&{Ki4ZzgMyj;ckQ) zgd)veg)#*!0N_N3hrWH?T%uh?9~;>5`p#LF>CLlghH6zd=WBNCjTP_g92+t|`BcDU z8*0G;_a0%sXLZcd_hRa?W6;@X2zdaQFc*+O#7r)5gnbZjB!47bo-atBpG;n$}q2#I)OR_MbV zNEYd(o!S}Ko3_P(@-mCi*%U!;l!2Mn-PwFMo^~=1Wyl2abDKh~aiQ$L#IaCcn{oereQ`qJAKf{Ue^?o|z34Fk2aJ5(;W z1zKVWdpzsIJO9MS6I=Da-2(H{)<|BnZ$KD}PcvZ}A8^DOh>s7P8f}Pv^Av@NVOoe8 zMma+Epe!h8vOD!#C}uvicOT$@e!+*<>!Q#ovwj}T9NTXw;F#xtehWoNphut0vP3{I z$`xZL0w}5iP`)W@^O`*H?{&|(vg4mQpHy>`hb7IOvso$ZxuWyQ>&27*r8`s6brAY`v7T?Jn1g9rL>H3hq1e%Pfx)%_L zmq6WVp^gMb)ZiD9e?t5SBRDO=%ly&hCjw#J_Ir;~O%`Ai-rUVsH*{s#6Ptp-aA+4t zK_oJdb;W6>2Qv~m9yY-C2!p%yuR9rOP1!OY*9zG!)RUc~rv4iroR5mG7V|eVwHvW68p~14+RZbYGT;DI z;_4IF2DiLa$0HAy+!jQvWDtJeL93dFPbg1!br(acX0#%6u8J@-cT=8sEdvj4vbtkq zC1}=Li)_!j-38lCOGA^DT!!LAwr~3fugqEP3_xBrGp?bkn9qyt)}sS1Mgc&0xQ@p~ z)>)T%ZO&%L_D9nh_fBtG8M(3jt%|{whtJn)%4PY@V1(k2hqZ1&OxZGb7;0Kh<`q(&7;(PMxCz-Zr-@u+&6eUJggut#%HHE%2i z+B9W{n!oLV_W<-$0wZy5Srw3gZ3EfSQSA@XUJ__?bt&G2=F1RXWYQxUbc?r%)-$TN z-zMh~vt#z)vm6#{w!tJ3hFSVBeMt#&Bm*dFhi+eHJ@>>jgh{5!&B$Oz;HoXMZK7cXRMsZ=4N96D({&t_J!aY4^hPt7N^svH3SoDU4>lL*vgB`(?HS&!Cm?N zWxaqJh&v%$DYM1gCfX)DRm*{19zhMhL9skJ<%#X|ZgQSo-C&{sKsEVqW)!F<9eHCW zJ8nC^w}v@_I`m-N#s3?#0C#_D&IQPAbEe0(CsE-5V+k9Xc?V%S zo->?v8`nyh>W7rq6L!SV%%Y0rK2)ZhNO&@0m(glT1eIQ8%R zXU=DIli*1&Z(Z**ng}dMd%ep%=Ion0dg&cbqgq49O=-3oVae0mbrQzD<`BazaJ{ECqct&7DpWrtbY^i#+yR+R3W!8smU> zg+w6?qAUv14uE(UHZDSXR%ac70UyHk)|f;ad{M4_M`5;eCpj%mP%jp%#R$J zcCighaD8n*y&^n&$W`3X@i%7F^_NqbwvYitjRE*W@gG!Ohny61Xo+wNs^u`ruMak6 z((iv#J~QpXY4cB-X9IFDEx~53?X3Hs;rvwNa>6GwO?LkJkFZnux4#Q_oBa9T95MH+ zi+id0rw>2ZO3LRE@`Mp3tp)ee`{!Ey!}T-waOmgR;Q9Q|8@#`!AN51|Ufu7Bk~X{b zZR&FhNJuaAc*18j#@5fOV=fw#e-7;Ll{zty!T%DpD;=I^#rsX@z_djsH7CP;#J&Wu z&No8Vbkh4u^D*6XH1}BDyD-7qPLau#b0W9B|7o=mt%iEDBJHlkFU1pv!Y|Z zyuwaPz79R!9WtrZNI$P#KW+JTfa}GL6K2vr+5g8>e*M?(ugmy~v=a(gY}ZOZro!uc z#ozw1$zI$kJ|Fe_(;~(c#l<#>Z7>~)1%FVLE9ot!+@DHQo*jW*W3UKU@2g0u+4Lpi z9w{Ui7MbqtHuIMv{eUnx|Kz-@U5NJ)`?2vYyShBq@hid1X33JTJ+*Jy`DwTL*RuD! z=Jx-IdmS@+I%)cD$A5A?ZTtNIV&6iv@%_c6&lkgxo}Sa&eg8~}{(S{MrfK3CCya69 z#8GxT!sBMyL~$Bd1cS`F9T$En)PF8m9WkhX$xk;=qCdBE{{&)Ij`?%b{LVcfFc6T~ z4qd!nx`@H@^_op zb1`nK;E)2g;F{8zvmZ~nk;?_9WdQu-(M;mX>+Sd9mWRW(trhbTn|4~Z=ZUu4Ca=xs zRiypO@oe(vJvkL^kQ45k^d_d#Y#TSq(vj&t-_ooHfCrNG>Jsq|xWXwX zM2f!XNZRChlKlBG!s9vKp0;*5IKG!*^2?WFCF;!tp?F-(D?Je`Q5lvd>Cv4&jd8+$ zB2#V_f7Id^AsZo6R$JafJ_g>yDQwyMJ4nwC%~PQ?e3@#qnMr75|FoeaY$KX%()GQa zcb%HAF5d>dzsh~a*Kc!9qkw3S1)o2UaQY+zo8wom*WcqjL+4rBN4jy%#kmy-LI%V& zZeXhYtvBtLPS5)O6vk4!gkE?@M96Z}|D?U4RG|e=qYFLLY%%A?e4Z zd0<>b{_*VmZKv0NYkSo^v(u{pi1#`>sktuzUr048%s9{UT1A0t?3@cdmif#4xWy_# zd}sK#UGB-$cgbh^bB? zeNzC&C3w31^N-4(U(RBNZ&sL{IR&I$z@`TPS8khcZWqME5Zs3sU$F~=iG+@}geI`e z)v_b0vwF3}^Z)7Lp7UG0!1U9xa=`2HljphsEpyIGR?@!55ooX~sZG1LHMqW|gw=d@ z?;n3#*mR$toC{F;Fp2snuDl3|5-HpVo8iZd%c%~}@2!0$OHycYPZMVK`CB4i*N=NJ z6?Yu-M}Oh1=n#hKBgy<8fsRKMy6v;)WW^^-KfCEWnpvAk)B`r}&pl!~-6!V&0O{%+ zk%xY6^ZEA%pT9VD@Q&!z6#1`{X_{aHkN*CuOuHXBbw=a!vE)5Kn4}%jOXNpV&*Pi` zVPCKLNbb~+>5<$IG5C0M7t{M!Xnix|Z)KS;* zuU>1?hx;P?q&@f7(*5_r`R&IAUzpzR^zL6bHOK7hHk+bfF+Ljm4q~pHYp*$m^9)o< z$Kf@@KevoeBK`~$0Ab=?jnkul>@bcey|~!zJU(-M{_1|5N#{Bw@ zwcX`UZmJ7CHbU;H#_KWcNLtfBlmSkf=STV{L%+FxhgPpi*1 z?O)fMZUL!JH_Y{jz90YYa$cBKDmFc}As<14#Ii zNFB!<7vRWHSs=!xwO2T0YTIKt$cNQzwo3EVa!dDnqn!AzNyvps^91m0+k2*0HW!WW z&iu7ZV*Xg={o46%{pYvpT({m4zP{c1>YpJi9&m^}~a2%^nT%oATPfyKOzwj__FdgJ`w#c(u>|){3tq?;@K-i~O>4 ze++-`s-FeA`q(^~Y2x_(h*z_DdYJjhcMf{}vzSknPs%6H-X6`zBVWzX;QLqcldv!` zwPH2DE9^o?_f1zKt&W{apTBGaiFBD9!msmvE=>HK_vfbrlJzFZ`}ZFFu}yyQ{sgPl z8hKQw#CA<49{(7UznuRujm$%H>Cv$oc;48n(n6fLOa-3L3ned-RO`$0)rh2}8bpA| z7c0%N5CA~fJ{iKSRr0Lx=Wo{ggnX^?>nC7H_m`yS;R@j7M4%|_5%2yCU$`Pn%bo8# z$A3c@D{mL%6L9V!%=LErJRm)b6`tNFkJdRg{mi=G_ySkJ9`A6)efJRNfzJ1PA)N62 z+<)Hptnoef6XqTzfBgooH`{;DwCPO4+VqtA{6-kvzh{}h{P(c?kNO_&zentQdH^SV z9t+d3;`P~5zkX)D?*S_unZSJkHz$10G^|*p*A$|y?=SxEV%UK~GiH`y1=XMe03@$4 zwLCbI770M2yJk$=2z&~{-UhGLv2l~E#hc`8gxy3`h0pCc*@oG;Gb{)L-Ua|~llOWP z+yhKMySp0faSs4t+TP^sg=sm{Ii5c5xkuZB;Kk@WH~-!%KS$nok6|a3or#I+ELH4( zgGf+PXShMUd?|f)kIxo0Ggotrf~PeazV*CW@|=t?E?O;@wDR{>i5Lc+EXby>=i>LK z5U^i)kl`CdxnC;Y5jG0U3E3S!;UZUg9~1*mhC#0O5=#*hkd^_x%JANl%UN0^f~qhfv#X7dfrk3?xX<-Tcp z_}qv}H;MCmXZz2|_#YGhpR)fk`Vb+s#k!?Wo>n8e+T?3s4e3z?g=AyGtm|M?H9qGP zWmFQg-EF#)an33-&4YkB@Oe=TY%zBL24+SHv3V0y(O5=ip+c&^?aAuH{o?l{UO;+I zn0KnQ83ovUC)0ZuScg6Rzk&OO+j(=bW~=n1*9GqLGqgw|Flz1yLc{%rafO-Pd%_Dgan4VtY}YZ6dB{JM&I#3`2WV&3F(68EwVw zQUN~r;76YvH8}~5%0TCsNk!?$)OUIuML(`&AfrzbFGWq(sr1y(XXxkJ^0egzBBBsF z;voX7c)f?vh^VmpiA2i)Z-dZ?D{a2}dd+J@?w%1o#5;ipi3|PM{gH@DPO-)QCh=-i z+dtU6p^vU9Dw|GJ53kDTC-lJ|n&p4@aQ)Odmxy;KG~_y&MtpYoc}$s5h}MWy5B#GhLL8_(@go_!RP7E>%q=92kJ>$WMA z&IHK#)^VikU+&P<5Pjzx^G&q=sTH+-^j(u(>hvi+4ve(1l-YjF`S`tWmMNL3;Hn~qrnD&Hpm(oQ#@U70r}HBbhB6h^>Dcxb+ZI5y>VV4KKTArk#3T)Mt5c1R z_r>TC?hr^>gmDnI;w`3=^H?_HtxgK|GCS_QYCcUP&1C&~rJenH_w1f=?YrCDPL6Yi z*-@mIzzoK@qh*GeeRnqh$5KcESG=(uh)x2hK*_SM?- z?dVR=qvxd1aW6MlA20r`#}|LzzV9dYWue#g_=xAT>ht4>*W>X(>}>GMN$5YBhx*;v zK3`d%v$^*AJhgd;zfN*WzcoLZf0K63C)@t6$wu&`O;+UbjlVzpz3+l*sL-1Oayd7J z5e>b2wKLu{B7)b8mzbJwFYS&FS-0#Z0+R6Qen!IGD6ly(2CjZtc+;{oM*fP_z9T$@ z0wN`8N$1O@!{0qD$(f<-gb?c=|FrLF*|>M|(guu>73ebClyqN=FV?0sv~M&fyKU2l zbkq3LRuCAEIP>&Vvgx`c%d|_DnfT=9J(3x}9G?=?{kr6xE=x~gdL)U<>4Yx5mj?U8 zua;No=^?}ht517pch1C|TMpWYBZp24DT5+pG)#l~MB&sb$U0e(9*zreAU47V zt|m*&7KCXIEK?_%o|#OxB#y!bSw8TLwz508<}@qU)>$vJ@?2oaN4@uc95a5ORoWGWoEIh98SBKkHnm0 zSf?JzXa4P?-#z6M!2_%9|IagiX25)o%^RDi*gus2(d(wTrG={-$pO&0s!N#)WnYWCJNgwA8@kA|26(dpCs!5N%Q zHm%r|){D=b)Vw+LoLZM^5eJh8GAO{nP27#$@P}aA`?i3PZGaAKA?|2`0)W`EK-D)b z7$IrmHXQSh1GC}bH78w|$SSp`NvdAG$;06RO*A9OVPDd2%2{;uN2lq#^IP=c(KJcJ zMR~LMs>ypET**=ijfuQJB2u_V{1_YQbLw~9S7fK}r1)HBn9#$1PIqKVOhqd6@*Qt|f7w}jm7 zy4s}Iiu51DzM}a#41Pw_BnUAtgeCc0^gnOSjx>3_?VkV7 zjN)65NqWqqyCSoQ3|3Ef<^LXI{g@rLmmRY}p~)#(k?MYS_%FUW`*cVXtJ;GcV?`W3 zx+D_Tp8~!R7{vlGLC5H!HN*vFC}k25z@f!3j896jD3I)K$X!5$YT2_bKLX;hYGVs6 z&l--gV}~b^iUJJ8uJ@T`p9Qf64#1#LbooK?+Rvb)NA$)|dU?LWU zFh+jVuI`6vzOU81p2x3>dNEfO>tyn_$=g1fCaNW;<2^g1V|hs7?3ECy&%qQW0RRu@ z_+KOJS)>=u&k=kry7OCi>4})J`SrN-#QztciJ`zm;V)eM67sl1m^V~PtI{B`>Kx^_#H*f!d4En1Bq?n?nLQgMR|BWa zIJv_l-oKT7GuD{soiM$YMzW%v5^ddq(oQJ^z^+N~KDVC{k|ZGx_a*HEQG;I-^9SkY zdF*?+^xDhs{sI7mKHR;e9sLkLkND@WT_5@X-Yc9DY2wF(U%LLN`2N;ie?yoHywH~u zBCLGniH6w#bKz%)pEcWpUcH2lXMMQ&iH!l8XV>$`u+7Q+0yiWhF);k5$Tr>)j~PXq zi48K#^exzP>?Y)%bec56(pAYgW#S+$&LBb;e|JiWi(!9QB;H}&%I8gYI;_FuZaq0IxrzO8b;Kl?XWf`~Q{GB)4e zT=Ko!=gIW?2tNpa;IpsnnsIskIsC`>))4j+LCCb8{<{H2L7?8*X4$6?FqN~*taUM| zI@%Q|eKEw1jV_IuhS96a!XH=Hb|t@1uMh%7QB|c;=4^Li#V12>JTvjsOVR0ac;}PN zGib7h+%CV$*t;v4l}b?n#f9vZ6zf}Z^3EsQGkYeUT?Mro@>gc#$yA0TYZ;n7Cl=qa zV-Co=v>;^LXHPW6kO;0!C8kp!1prh?Fj;fNbY9+!YjRa&2=Ez%q_j?Q%;)BuNku(R zKes`y2cze)h2r`ER}X|8>CY>FCoOr^UeKJGGBcRRpIbX`vbOPfJ+02LpVj<+njg7b z^J6bZnrMET?|WSHdfq51?t>dimuHH~teJO8lSL6z+AMVy=Z%Dq=65|_y7!iT60PYy zbKVngU&-h4zbO5@$4~x|dEZ@P9y__)CZ9uxD9zWG$Iq=gyO^i+U;)@En?HZ;_Q!vk z{l6#kB|aZs*7ZmKw|lGohyUI4M>Ss?6*7&oyNd#fKwk}BZiQ?pAS9sd%wPsz_83>& zSi7c-0s3HlXaIFGp@6`A?K!TNJ7s`-0D!GrKr0>RBePbJk9(+50L4XR-WuYCJF7qQz2m*;z8eO{ni?eo(Djb;CWPQ;^@QRMjg1v zH?NnTu^cfM`i9!OuYX+Hh|ywSLOCTDQOUW{*?=TGL)WU;ZDSfA7DfA3q{6kZ9sZu86!S-2QPlXXF-#^n7ynMi%3wuM5=8 zjQ|uQ{{gUE6H#(5WHM2gUmwu7gQeH2`R#|W-!(t(y%v_hy?VDAQ7f- zHKgR-SQHHPn!*dXk@4?9sAir(_`fE?w8stLB)C{}En2>X9u$m#Si-PO+`IbfHhoTm z5kxqAj{)QDXNwoYV{{_`fP#<+0MK+jXu`wDUZbbn5g-f>p&DfN!dc>0j=2U3tk(!^ zf( zs98#lE&BZteNYokN?s++RHruQA-a6bu-DrnrjDpGOmFi%{NET+ZcB)t?P1MH0zj7r1Qq_kvaD;Qh}A8(McAE6g;dA%KBxI)B5u zFR=ELXk%JqeU82w+xcnhOf_|A2h)65{%(5>nMA;-C!1Xi=@p|Hp!%qC^NEpRy=g4$ znuT}nF)i0Ljdf6XgAWFw_NfkSGENVk#-_>p9zRVo1=wcZ_RXoWHSYgw@y3PM zOpU!z}id! ze&KU_wMISgY3e&e8Dx3uXV34B{H!n=mYrmPm%e<$t+xrBc+(AGvaB=WC z?lD>Pk+B!uoqW=u(3S7P^T)6h zrb<#G)@PL1SIvVJYEL*1H4004`zodN#F^&@pfbJM24va60T-9vE?5%0@VrE(Xe#8-p!4%n&G`I6w^jNd;{UOCe`E#>w`AL*BPvY;eO?5uVgS zB(I4x`5s>I%AE76<)YtVnftC?`>DGNq?_zyQ{nnb(E^mlu;q^B(FeO+5}MK@Cp2h{ z3YTHvZ~JVbVXhL;&hcwttiI=yT|U6 zeADLHR~a=B z*K8Kz0iW!EEY(lbk!z!svnW;7&#B00fQvBi@W$)(W5f$d+Y;kMRlCU9@ot=MbUm!p zCNTTgI_rPnxYhD@FJn6`(afbAe!d)rWeHr;>6gVMG;Vi)%1UA6IorUIk#p`Ie@e&z z_9!v^)|gG$Jv~b$%k;tYjkl_uZ`yxURD&$WUucChA+Ay=h*-@aoTi3ZV5obbi;+e* z3j-N!O@rQB!FWTVrU?O_DmBg8#8z({bG}c#b=A4Q;f?A@g>I;xz4h?9GWc%hoi5TO zfxC{*v?a3Gam#xnDx_R?7|4j_rs-hYT%aQ|o+ReLcXd~*1V<;|0(hH7Sg`i%TnxlzjKO|b9Ow)q>aQS8 z^`{q@Civ}Bfki5godvI;);ygl78ZU~vnwD_K}>mAm%E=+94Z&TY0(`gP*Ty2bhJ7E zU~zgh25?2(b+Dei8Va>;X8+z$XTozh_sO=H@ZiSy%}EsRTb*pn8_TR;i{j)A%WJlF z|JI$G51XS*xizI)-*yvxT^3vq@a6=l#sKtZ+n^x8wpJhIh#ObjY=Mo>-4P{l;OdK_ z?Pk2s&3Z#@i?<`}uHXD$Cqr`UF+H2oZDw+U++2(R_~D%ZkV0ANBIETDRj z@JJ`@%WGFyj@IErcZ+`rRYp^BPwLwc2^fK zu6EOv*UoH+MSFK}`x@x4rVX>D8I>Y_fBwR#O?dvHeA0 zv`f&Z0BEL-``YpPvmqQS1dZx=Y7p#}EM>b9`z&1UhUIv{*U)9=E`+OeJ*;_8ybmfxZTa@QyY8Uy55V+f^C zzUpeh$$rr}L#4CJW}eCECw#y;{st8zIy}Tr3`LtR+U#W0SgJ5*Kt)DQx9^*s7^OA$ zs>|50fFEif?m8bE9*e`6WAbUo8;-s?cnSc&S~F^A31r6RFrC-F_0bU(5_dW@+n+QI zq`j+C!w6Nfoidb<111GF)w4Pzvb*4rXyu~AJgf8eQ#3Q}xu=h9KnbJ--C>V(ZN^<4E&45ai~F1bS6HaAFFXOdYEqmGBh(%ns^8W3hU^KmW=;Wb7+yM=T-o_ zYYU9f+6{7&IAm#IDnr2=$Sav{*rXAhQifJsXcEG zpc0X`M=Ep&DyWJMHQi@nZ`4E8%RpC~eH4TK%974{W&6N z;MvNaBeA*Ay|=4lGZi9Gk>_9C@L>=c^}CFbiz78`=N#ae(f$o`@4rHu*mQHXQ^hR0 zyd+!wB7!Ej4Nz2!vL$%LlT82!L4rw@;hm{?*);b0SJvI>@l%X~%vow7T=78=9^1~J z;%b;S5gv2>2Fp9^@uMd4vb9)wW9RhD0;cq)Y&mrRUq%H0Ujo<)fC>Hu<8|&s13*AA z;B0>KU@`1A*-6e>;Cfpm)!zq5(F_D|J7Cw`%7o80&nntvOr7b zL?pRxior)bS~$qdRRQPd!}Q6#uJ6THa$KLvic6ONz3+_*fgloo+C3{U0%Zu1At2ND z78TnTS?8aZ$L)M-3SwWK3ilTikdd_P1`NOKd&z)e*nJ$RcWW^?E4CbZcHShJ4$8{W zz@(j|+|JcDr#=^<0X8aU?bHlKc5KQENKnDQ0e}fWAlNkQk#RF94B?HxDYH4_RD&;; zMMlW{610hJHLRq7}rt(RJ1X!(Cdbl`2OA9JZ&q0Pcr}=m~-7V%ofmMyaPZ{l_{Vq za@-OZbJM!FD*Eb$6TrD{y{*Y@puSX4R9WYx@V>98x|S5Jayh%VzU*ovFKYyxk=0;S zG5XNxt@cMjRB^;>m)*X6n=CrAF-$PZIrd;~nWy>ox&U}p`gUt~D)+(Q3UJe^Ez3Vn zLbd5{(gPijMuA#{sTpH``LapS7^oOuX4{^PN!$jI8W?T$zRR?yH@BU+3RzY5_n8-N zrEviyW`a?x1mko)#US3?X!+clGAdnOs9+PqR12#*GN}FM3H<+SfVwAEq?kDUeO~$O zY5|LA)vESN$sf6M@BodR^uRch9$U+Ucyw;3TCrCifzk2OyVh70F=55V@zNzLgSR

DF(^D&7}?W5Mkj+5o5^^F4)^R!0~6~;sUW^u*g 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 W5)y**xz=YyUT(1^z;4Q_ujSc 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 literal 0 HcmV?d00001 diff --git a/tutorials/xr/img/openxr_hand_skeleton.webp b/tutorials/xr/img/openxr_hand_skeleton.webp deleted file mode 100644 index 22fb395d689724dc4981fd20415b462463aecf1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58240 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

GBzNJQ%v#ryV~7-J`^S=kDf4w2YSBS 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 TKR4<>H|jq(>OVK?KQ2!IWhU=L literal 0 HcmV?d00001 diff --git a/tutorials/xr/img/openxr_htc_hand_interaction_profile.webp b/tutorials/xr/img/openxr_htc_hand_interaction_profile.webp new file mode 100644 index 0000000000000000000000000000000000000000..ff96cccdac2cee56ee31d0c9a5006caed44931f3 GIT binary patch literal 15548 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 Db74VL literal 0 HcmV?d00001 diff --git a/tutorials/xr/img/openxr_msft_hand_interaction_profile.webp b/tutorials/xr/img/openxr_msft_hand_interaction_profile.webp new file mode 100644 index 0000000000000000000000000000000000000000..e674d3b813788551acfd73e37c3fbee0b5d430f2 GIT binary patch literal 17076 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 S;FOMVUnRA}j;1{2DFXnMK2Np) literal 3750 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 QNk3%Gqv7=c0RDgg00{I-!T` nodes as children to +the :ref:`XROrigin3D ` node and assign one of the following trackers: + +.. list-table:: HTC trackers + :widths: 100 + :header-rows: 0 + + * - /user/vive_tracker_htcx/role/handheld_object + * - /user/vive_tracker_htcx/role/left_foot + * - /user/vive_tracker_htcx/role/right_foot + * - /user/vive_tracker_htcx/role/left_shoulder + * - /user/vive_tracker_htcx/role/right_shoulder + * - /user/vive_tracker_htcx/role/left_elbow + * - /user/vive_tracker_htcx/role/right_elbow + * - /user/vive_tracker_htcx/role/left_knee + * - /user/vive_tracker_htcx/role/right_knee + * - /user/vive_tracker_htcx/role/waist + * - /user/vive_tracker_htcx/role/chest + * - /user/vive_tracker_htcx/role/camera + * - /user/vive_tracker_htcx/role/keyboard + +You can now use these as targets for IK modifiers on a full body avatar. diff --git a/tutorials/xr/openxr_hand_tracking.rst b/tutorials/xr/openxr_hand_tracking.rst index e974b6b49f3..9f0da10f5db 100644 --- a/tutorials/xr/openxr_hand_tracking.rst +++ b/tutorials/xr/openxr_hand_tracking.rst @@ -1,201 +1,355 @@ .. _doc_openxr_hand_tracking: -The OpenXR hand tracking -======================== - -Hand tracking is the process by which the position and orientation of the players hands are tracked, -including the orientation of the players fingers. -We can identify 3 categories of this: - -One, hand tracking through external sensors such as cameras. -This is what Hololens, Quest, UltraLeap and similar devices do. -This often results in very accurate tracking of all fingers of the players hands. - -Two, hand tracking through VR gloves. -This method is still mostly experimental but is likely to gain popularity soon. -Gloves often have good finger tracking capabilities but their real selling point is the ability to restrict movement. -This allows the sensation of touch. -Gloves are often also recognised as controllers and often will have additional controls such as buttons embedded. - -Three, inferred hand tracking. -This has been the de facto approach since the early days of VR. -As we know the player is holding a controller and we know the position of this controller, -we can infer where to render the players hand. -Fingers can be positioned based on the controls the player is interacting with. -Many modern VR controllers have additional sensors to help determine finger positions on the controller. +OpenXR hand tracking +==================== + +Introduction +------------ .. note:: - Traditionally inferred hand tracking has been the responsibility of the game. - However the principles behind the action map have somewhat limited the viable options here. - Valve is currently the only XR Runtime that has implemented inferred hand tracking as part of the hand tracking extension. - There is an expectation that other XR Runtimes will follow this example in the near future. - - Until then we recommend that if your game depends on inferred hand tracking, - to use the hand assets that are part of Godot XR Tools. - -Tracking through interaction profiles -------------------------------------- - -Tracking the location and state of controllers are performed through interaction profiles. -Bindings can be set within the :ref:`action map `. - -However it is important to realise that in OpenXR controllers are bound to paths indicating the usage of these controllers. -I.e. the controller held in the players left hand is bound to ``/user/hand/left`` -while the controller in the players right hand is bound to ``/user/hand/right``. -And while not yet supported outside of the HTC tracker extension, -it is likely OpenXR will be extended with paths such as ``/user/foot/left`` and ``/user/foot/right`` at some point. - -.. warning:: - - This paradigm therefore begs the question what happens to a controller that is not being held by a user. - There is no answer to this question yet, this is still being debated and the specification may change in the near future. - The behavior is thus undefined and can be different for different platforms. - - The most common is that the controller will remain bound regardless of whether the player is actually holding the controller. - - However there are runtimes, such as the Quest, that can unbind a controller when it is not being held by the user. - - This may become the norm in the future and the expectation is that the action map system will be enhanced accordingly. - -The hand tracking extension ---------------------------- - -OpenXR has an extension that exposes hand tracking functionality. -This extension allows a game to request the hand skeleton with all bone positions for each hand. - -.. figure:: img/openxr_hand_skeleton.webp - :align: center - - Copyright (c) 2017-2022, The Khronos Group Inc. SPDX-License-Identifier: CC-BY-4.0 - -The above image shows the joints that have to be provided by each XR runtime that implements this extension. - -Currently Godot exposes this functionality through the :ref:`OpenXRHand ` node. -This is a helper node that will retrieve the hand tracking data from OpenXR and apply it to a skeleton in Godot. -You select either the left or right hand through the ``hand`` property on this node. - -The hand asset itself has to be provided by the developer and is thus separate from the OpenXRHand node. -You set the ``hand_skeleton`` on the OpenXRHand node to the skeleton it needs to apply the tracking data to. - -If supported by the XR runtime you can also set the ``motion_range`` property to limit how far the hand can close. - -The skeleton for this asset has to have the following bones: - -.. list-table:: OpenXR hand skeleton - :widths: 50 50 - :header-rows: 1 - - * - Left hand - - Right hand - * - Palm_L - - Palm_R - * - Wrist_L - - Wrist_R - * - Thumb_Metacarpal_L - - Thumb_Metacarpal_R - * - Thumb_Proximal_L - - Thumb_Proximal_R - * - Thumb_Distal_L - - Thumb_Distal_R - * - Thumb_Tip_L - - Thumb_Tip_R - * - Index_Metacarpal_L - - Index_Metacarpal_R - * - Index_Proximal_L - - Index_Proximal_R - * - Index_Intermediate_L - - Index_Intermediate_R - * - Index_Distal_L - - Index_Distal_R - * - Index_Tip_L - - Index_Tip_R - * - Middle_Metacarpal_L - - Middle_Metacarpal_R - * - Middle_Proximal_L - - Middle_Proximal_R - * - Middle_Intermediate_L - - Middle_Intermediate_R - * - Middle_Distal_L - - Middle_Distal_R - * - Middle_Tip_L - - Middle_Tip_R - * - Ring_Metacarpal_L - - Ring_Metacarpal_R - * - Ring_Proximal_L - - Ring_Proximal_R - * - Ring_Intermediate_L - - Ring_Intermediate_R - * - Ring_Distal_L - - Ring_Distal_R - * - Ring_Tip_L - - Ring_Tip_R - * - Little_Metacarpal_L - - Little_Metacarpal_R - * - Little_Proximal_L - - Little_Proximal_R - * - Little_Intermediate_L - - Little_Intermediate_R - * - Little_Distal_L - - Little_Distal_R - * - Little_Tip_L - - Little_Tip_R - -.. warning:: - - The skeleton data returned from different XR runtimes are often not compatible which poses a problem for cross platform development. - - For instance both Microsoft and Meta runtimes base the skeleton on the actual hands of the player. - These skeletons will thus conform to the size of the players hand. - - Contrast that to Valve where a fixed skeleton is used if inferred hand tracking is applied. - - We are still gathering experience on how best to deal with these differences in the platforms. - -When exporting to Meta Quest you need to enable the following setting: + This page focuses specifically on the feature set exposed through OpenXR. + Parts of the functionality presented here also applies to WebXR and can by provided + by other XR interfaces. + +When discussing hand tracking it is important to know that there are differences of opinion as to where lines are drawn. +The practical result of this is that there are differences in implementation between the different OpenXR runtimes. +You may find yourself in a place where chosen hardware doesn't support a piece of the puzzle or does things differently +enough from the other platforms that you need to do extra work. + +That said, recent improvements to the OpenXR specification are closing these gaps and as platforms implement +these improvements we are getting closer to a future where we have either full portability between platforms +or at least a clear way to detect the capabilities of a platform. + +When we look at the early days of VR the focus of the major platforms was on tracked controller based input. +Here we are tracking a physical device that also has buttons for further input. +From the tracking data we can infer the location of the player's hands but no further information is known, +traditionally it was left up to the game to implement a mechanism to display the player's hand and animate +the fingers based on further input from the controller, be it due to buttons being pressed or through proximity +sensors. +Often fingers are also placed based on context, what the user is holding, and what action a user is performing. + +More recently optical hand tracking has become a popular solution, where cameras track the user's hands +and full tracking data for the hand and finger positions becomes available. +Many vendors saw this as completely separate from controller tracking and introduced independent APIs to +access hand and finger positions and orientation data. +When handling input, it was up to the game developer to implement a gesture detection mechanism. + +This split also exists in OpenXR, where controller tracking is handled primarily by the action map system, +while optical hand tracking is primarily handled by the hand tracking API extension. + +However, the world is not that black and white and we're seeing a number of scenarios +where we cross the line: + + * Devices that fit in both categories, such as tracked gloves + and controllers such as the Index controller that also perform finger tracking. + * XR Runtimes that implement inferred hand tracking from controller data as a means + to solve proper finger placement for multiple controllers. + * XR applications that wish to seamlessly switch between controller and hand tracking + offering the same user experience regardless of approach used. + +OpenXR is answering this call by introducing further extensions that lets us query the capabilities of +the XR runtime/hardware or that add further functionality across this divide. +The problem that currently does remain is that there are gaps in adopting these extensions, +with some platforms thus not reporting capabilities to their full extent. +As such you may need to test for the features available on specific hardware +and adjust your approach accordingly. + +Demo project +------------ + +The information presented on this page was used to create a demo project that can be found +`here `_. + + +The Hand Tracking API +--------------------- + +As mentioned in our introduction, the hand tracking API is primarily used with optical hand tracking +and on many platforms only works when the user is not holding a controller. +Some platforms support controller inferred hand tracking meaning that you will get hand tracking data +even if the user is holding a controller. +This includes SteamVR, Meta Quest (currently native only but Meta link support is likely coming), +and hopefully soon others as well. + +The hand tracking implementation in Godot has been standardized around the Godot Humanoid Skeleton +and works both in OpenXR and WebXR. The instructions below will thus work in both environments. + +In order to use the hand tracking API with OpenXR you first need to enable it. +This can be done in the project settings: .. image:: img/xr_enable_handtracking.webp -Body tracking -------------- +For some standalone XR devices you also need to configure the hand tracking extension in export settings, +for instance for Meta Quest: + +.. image:: img/openxr_enable_hand_tracking_meta.webp + +Now you need to add 3 components into your scene for each hand: + + * A tracked node to position the hand. + * A properly skinned hand mesh with skeleton. + * A skeleton modifier that applies finger tracking data to the skeleton. + +.. image:: img/openxr_hand_tracking_nodes.webp + +Hand tracking node +^^^^^^^^^^^^^^^^^^ + +The hand tracking system uses separate hand trackers to track the position of the player's hands +within our tracking space. + +This information has been separated out for the following use cases: + + * Tracking happens in the local space of the :ref:`XROrigin3D ` node. + This node must be a child of the `XROrigin3D` node in order to be correctly placed. + * This node can be used as an IK target when an upper body mesh with arms is used instead + of separate hand meshes. + * Actual placement of the hands may be loosely bound to the tracking in scenarios such as + avatar creation UIs, fake mirrors, or similar situations + resulting in the hand mesh and finger tracking being localized elsewhere. + +We'll concentrate on the first use case only. + +For this you need to add an :ref:`XRNode3D ` node to your ``XROrigin3D`` node. + + * On this node the ``tracker`` should be set to ``/user/hand_tracker/left`` or ``/user/hand_tracker/right`` + for the left or right hand respectively. + * The ``pose`` should remain set to ``default``, no other option will work here. + * The checkbox ``Show When Tracked`` will automatically hide this node if no tracking data is available, + or make this node visible if tracking data is available. + +Rigged hand mesh +^^^^^^^^^^^^^^^^ + +In order to display our hand we need a hand mesh that is properly rigged and skinned. +For this Godot uses the hand bone structure as defined for the :ref:`Godot Humanoid ` +but optionally supporting an extra tip bone for each finger. + +The `OpenXR hand tracking demo `_ +contains example GLTF files of properly rigged hands. + +We will be using those here and add them as a child to our ``XRNode3D`` node. +We also need to enable editable children to gain access to our :ref:`Skeleton3D ` node. + +The hand skeleton modifier +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Finally we need to add a :ref:`XRHandModifier3D ` node as a child to our ``Skeleton3D`` node. +This node will obtain the finger tracking data from OpenXR and apply it the hand model. + +You need to set the ``Hand Tracker`` property to either ``/user/hand_tracker/left`` or ``/user/hand_tracker/right`` +depending on whether we are apply the tracking data of respectively the left or right hand. + +You can also set the ``Bone Update`` mode on this node. + + * ``Full`` applies the hand tracking data fully. + This does mean that the skeleton positioning will potentially reflect the size of the actual hand of the user. + This can lead to scrunching effect if meshes aren't weighted properly to account for this. + Make sure you test your game with players of all sizes when optical hand tracking is used! + * ``Rotation Only`` will only apply rotation to the bones of the hands and keep the bone length as is. + In this mode the size of the hand mesh doesn't change. + +With this added, when we run the project we should see the hand correctly displayed if hand tracking is supported. + +The hand tracking data source +----------------------------- + +This is an OpenXR extension that provides information about the source of the hand tracking data. +At this moment only a few runtimes implement it but if it is available, Godot will activate it. + +If this extension is not supported and thus unknown is returned, you can make the following assumptions: + + * If you are using SteamVR (including Steam link), only controller based hand tracking is supported. + * For any other runtime, if hand tracking is supported, only optical hand tracking is supported + (Note, Meta Link currently fall into this category). + * In all other cases, no hand tracking is supported at all. + +You can access this information through code: -At the time of writing, OpenXR does not support body tracking as part of the core spec. -We are expecting this to change in the near future as more and more body tracking solutions are hitting the market. +.. code-block:: gdscript -For now the only option available here is through HTC trackers. -There is an extension that becomes available if HTC trackers are supported by the XR runtime. -These are fully exposed through the action map system. + var hand_tracker : XRHandTracker = XRServer.get_tracker('/user/hand_tracker/left') + if hand_tracker: + if hand_tracker.has_tracking_data: + if hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_UNKNOWN: + print("Hand tracking source unknown") + elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_UNOBSTRUCTED: + print("Hand tracking source is optical hand tracking") + elif hand_tracker.hand_tracking_source == XRHandTracker.HAND_TRACKING_SOURCE_CONTROLLER: + print("Hand tracking data is inferred from controller data") + else: + print("Unknown hand tracking source ", hand_tracker.hand_tracking_source) + else: + print("Hand is currently not being tracked") + else: + print("No hand tracker registered") -Godot has full support for these and you can setup the trackers in the action map. -Each tracker is assigned a usage within the SteamVR interface. +This example simply logs the state for the left hand. + +If in this example no hand tracker is returned by ``get_tracker``, +this means the hand tracking API is not supported on the XR runtime at all. + +If there is a tracker but `has_tracking_data` is false, the user's hand is currently not being tracked. +This is likely caused by one of the following reasons: + + * The player's hand is not visible by any of the tracking cameras on the headset + * The player is currently using a controller and the headset only supports optical hand tracking + * The controller is turned off and only controller hand tracking is supported. + +Handling user input +------------------- + +Reacting to actions performed by the user is handled through :ref:`doc_xr_action_map` +if controllers are used. +In the action map you can map various inputs like the trigger or joystick on the controller +to an action. This can then drive logic in your game. + +When hand tracking is used we originally had no such inputs, +inputs are driven by gestures made by the user such as making a fist to grab +or pinching the thumb and index finger together to select something. +It was up to the game developer to implement this. + +Recognizing that there is an increasing demand for applications that can switch seamlessly +between controller and hand tracking and the need some form of basic input capability, +a number of extensions were added to the specification that provide some basic gesture recognition +and can be used with the action map. + +The hand interaction profile +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The `hand interaction profile extension `_ +is a new core extension which supports pinch, grasp, and poke gestures and related poses. +There is still limited support for this extension but it should become available in more +runtimes in the near future. + +.. image:: img/openxr_hand_interaction_profile.webp + +The pinch gesture is triggered by pinching your thumb and index finger together. +This is often used as a select gesture for menu systems, similar to using your controller +to point at an object and press the trigger to select and is thus often mapped as such. + + * The ``pinch pose`` is a pose positioned in the middle between the tip of the thumb and + the tip of the index finger and oriented such that a ray cast can be used to identify a target. + * The ``pinch`` float input is a value between 0.0 (the tip of the thumb and index finger are apart) + and 1.0 (the tip of the thumb and index finger are touching). + * The ``pinch ready`` input is true when the tips of the fingers are (close to) touching. + +The grasp gesture is triggered by making a fist and is often used to pick items up, +similar to engaging the squeeze input on controllers. + + * The ``grasp`` float input is a value between 0.0 (open hand) and 1.0 (fist). + * The ``grasp ready`` input is true when the user made a fist. + +The poke gesture is triggered by extending your index finger, this one is a bit +of an exception as the pose at the tip of your index finger is often used to poke +an interactable object. The ``poke pose`` is a pose positioned on the tip of the index finger. + +Finally the ``aim activate (ready)`` input is defined as an input that is 1.0/true +when the index finger is extended and pointing at a target that can be activated. +How runtimes interpret this, is not clear. + +With this setup the normal ``left_hand`` and ``right_hand`` trackers are used and you can +thus seamlessly switch between controller and hand tracking input. + +.. note:: + + You need to enable the hand interaction profile extension in the OpenXR project settings. + +Microsoft hand interaction profile +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The `Microsoft hand interaction profile extension `_ +was introduced by Microsoft and loosely mimics the simple controller profile. +Meta has also added support for this extension but only on their native OpenXR client, +it is currently not available over Meta Link. + +.. image:: img/openxr_msft_hand_interaction_profile.webp + +Pinch support is exposed through the ``select`` input, the value of which +is 0.0 when the tip of the thumb and index finger are apart +and 1.0 when they are together. + +Note that in this profile the ``aim pose`` is redefined as a pose between thumb +and index finger, oriented so a ray cast can be used to identify a target. + +Grasp support is exposed through the ``squeeze`` input, the value of which +is 0.0 when the hand is open, and 1.0 when a fist is made. + +With this setup the normal ``left_hand`` and ``right_hand`` trackers are used and you can +thus seamlessly switch between controller and hand tracking input. + +HTC hand interaction profile +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The `HTC hand interaction profile extension `_ +was introduced by HTC and is defined similarly to the Microsoft extension. +It is only supported by HTC for the Focus 3 and Elite XR headsets. + +.. image:: img/openxr_htc_hand_interaction_profile.webp + +See the Microsoft hand interaction profile for the gesture support. + +The defining difference is that this extension introduces two new trackers, +``/user/hand_htc/left`` and ``/user/hand_htc/right``. +This means that extra logic needs to be implemented to switch between the default trackers +and the HTC specific trackers when the user puts down, or picks up, their controller. + +Simple controller profile +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The simple controller profile is a standard core profile defined as a fallback profile +when a controller is used for which no profile exists. + +There are a number of OpenXR runtimes that will mimic controllers through +the simple controller profile when hand tracking is used. + +Unfortunately there is no sound way to determine whether an unknown controller is used +or whether hand tracking is emulating a controller through this profile. + +.. image:: img/openxr_simple_controller_hand.webp + +XR runtimes are free to define how the simple controller profile operates, +so there is also no certainty to how this profile is mapped to gestures. + +The most common mapping seems to be that ``select click`` is true +when the tip of the thumb and index fingers are touching while the +user's palm is facing away from the user. +``menu click`` will be true when tip of the thumb and index fingers +are touching while the user's palm is facing towards the user. + +With this setup the normal ``left_hand`` and ``right_hand`` trackers are used and you can +thus seamlessly switch between controller and hand tracking input. + +.. note:: -These are exposed through the following trackers: + As some of these interaction profiles have overlap it is important to know + that you can add each profile to your action map and the XR runtime will choose + the best fitting profile. -.. list-table:: HTC trackers - :widths: 100 - :header-rows: 0 + For instance, a Meta Quest supports both the Microsoft hand interaction profile + and simple controller profile. + If both are specified the Microsoft hand interaction profile will take precedence + and will be used. - * - /user/vive_tracker_htcx/role/handheld_object - * - /user/vive_tracker_htcx/role/left_foot - * - /user/vive_tracker_htcx/role/right_foot - * - /user/vive_tracker_htcx/role/left_shoulder - * - /user/vive_tracker_htcx/role/right_shoulder - * - /user/vive_tracker_htcx/role/left_elbow - * - /user/vive_tracker_htcx/role/right_elbow - * - /user/vive_tracker_htcx/role/left_knee - * - /user/vive_tracker_htcx/role/right_knee - * - /user/vive_tracker_htcx/role/waist - * - /user/vive_tracker_htcx/role/chest - * - /user/vive_tracker_htcx/role/camera - * - /user/vive_tracker_htcx/role/keyboard + The expectation is that once Meta supports the core hand interaction profile + extension, that profile will take precedence over both Microsoft + and simple controller profiles. +Gesture based input +^^^^^^^^^^^^^^^^^^^ -Some final words ----------------- +If the platform doesn't support any interaction profiles when hand tracking is used, +or if you're building an application where you need more complicated gesture support +you're going to need to build your own gesture recognition system. -Hand tracking is an area that is still under active development and we are expecting improvements in the near future. +You can obtain the full hand tracking data through the :ref:`XRHandTracker ` +resource for each hand. You can obtain the hand tracker by calling ``XRServer.get_tracker`` +and using either ``/user/hand_tracker/left`` or ``/user/hand_tracker/left`` as the tracker. +This resource provides access to all the joint information for the given hand. -The underlying principle that we're hoping will eventuate is that the action map will be used to handle interactions, -while the hand tracking extension will primarily be a means for visualising the players hand. -The hope here is that improvements to the OpenXR specification will ensure better portability between platforms. +Detailing out a full gesture recognition algorithm goes beyond the scope of this manual +however there are a number of community projects you can look at: + * `Julian Todd's Auto hands library `_ + * `Malcolm Nixons Hand Pose Detector `_ From c1bde8f76a9699372cfaa4432922abd28150b933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sr=C4=91an=20Joki=C4=87?= <41946771+SrdanJokic@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:27:30 +0200 Subject: [PATCH 026/122] Docs - Fixed input action C# issue The `SetAction` and `SetPressed` are internal methods and can't be invoked directly outside of that assembly. However, the `Action` and `Pressed` property setters invoke them instead. --- tutorials/inputs/inputevent.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/inputs/inputevent.rst b/tutorials/inputs/inputevent.rst index 25fa9c0b596..8f49916ffeb 100644 --- a/tutorials/inputs/inputevent.rst +++ b/tutorials/inputs/inputevent.rst @@ -234,8 +234,8 @@ The Input singleton has a method for this: var ev = new InputEventAction(); // Set as ui_left, pressed. - ev.SetAction("ui_left"); - ev.SetPressed(true); + ev.Action = "ui_left"; + ev.Pressed = true; // Feedback. Input.ParseInputEvent(ev); From e7bf6694e435688d2468126a7b9528cb5b55acfe Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Sat, 29 Jun 2024 19:35:38 -0500 Subject: [PATCH 027/122] Update played.gd/tscn filename to Played.gd to match example casing This update aligns with the Dodge The Creeps example git example repo. Reference: https://github.com/godotengine/godot-demo-projects/tree/0ec2fff5bf8baa6162823f6cbca89878384b8fe6/2d/dodge_the_creeps --- getting_started/first_2d_game/03.coding_the_player.rst | 2 +- getting_started/first_2d_game/05.the_main_game_scene.rst | 2 +- getting_started/first_3d_game/02.player_input.rst | 2 +- getting_started/first_3d_game/03.player_movement_code.rst | 2 +- getting_started/first_3d_game/04.mob_scene.rst | 2 +- getting_started/first_3d_game/06.jump_and_squash.rst | 2 +- getting_started/first_3d_game/07.killing_player.rst | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/getting_started/first_2d_game/03.coding_the_player.rst b/getting_started/first_2d_game/03.coding_the_player.rst index 1b88aa4be82..a6f7f97b895 100644 --- a/getting_started/first_2d_game/03.coding_the_player.rst +++ b/getting_started/first_2d_game/03.coding_the_player.rst @@ -63,7 +63,7 @@ override the value written in the script. .. image:: img/export_variable.webp -Your ``player.gd`` script should already contain +Your ``Player.gd`` script should already contain a ``_ready()`` and a ``_process()`` function. If you didn't select the default template shown above, create these functions while following the lesson. diff --git a/getting_started/first_2d_game/05.the_main_game_scene.rst b/getting_started/first_2d_game/05.the_main_game_scene.rst index a450ad2f8cb..aeaa864ceb6 100644 --- a/getting_started/first_2d_game/05.the_main_game_scene.rst +++ b/getting_started/first_2d_game/05.the_main_game_scene.rst @@ -10,7 +10,7 @@ Create a new scene and add a :ref:`Node ` named ``Main``. be a container for handling game logic. It does not require 2D functionality itself.) Click the **Instance** button (represented by a chain link icon) and select your saved -``player.tscn``. +``Player.tscn``. .. image:: img/instance_scene.webp diff --git a/getting_started/first_3d_game/02.player_input.rst b/getting_started/first_3d_game/02.player_input.rst index 282b722cab3..65269471e27 100644 --- a/getting_started/first_3d_game/02.player_input.rst +++ b/getting_started/first_3d_game/02.player_input.rst @@ -79,7 +79,7 @@ the eye icon next to the ``Character`` or the ``Pivot`` nodes. |image5| -Save the scene as ``player.tscn`` +Save the scene as ``Player.tscn`` With the nodes ready, we can almost get coding. But first, we need to define some input actions. diff --git a/getting_started/first_3d_game/03.player_movement_code.rst b/getting_started/first_3d_game/03.player_movement_code.rst index 6f4a0d02451..6f38febd53e 100644 --- a/getting_started/first_3d_game/03.player_movement_code.rst +++ b/getting_started/first_3d_game/03.player_movement_code.rst @@ -367,7 +367,7 @@ Child Scene*. |image2| -In the popup, double-click ``player.tscn``. The character should appear in the +In the popup, double-click ``Player.tscn``. The character should appear in the center of the viewport. Adding a camera diff --git a/getting_started/first_3d_game/04.mob_scene.rst b/getting_started/first_3d_game/04.mob_scene.rst index a96f71d3490..c3113c07ae5 100644 --- a/getting_started/first_3d_game/04.mob_scene.rst +++ b/getting_started/first_3d_game/04.mob_scene.rst @@ -7,7 +7,7 @@ In this part, you're going to code the monsters, which we'll call mobs. In the next lesson, we'll spawn them randomly around the playable area. Let's design the monsters themselves in a new scene. The node structure is going -to be similar to the ``player.tscn`` scene. +to be similar to the ``Player.tscn`` scene. Create a scene with, once again, a :ref:`CharacterBody3D ` node as its root. Name it ``Mob``. Add a child node :ref:`Node3D `, name it ``Pivot``. And drag and drop diff --git a/getting_started/first_3d_game/06.jump_and_squash.rst b/getting_started/first_3d_game/06.jump_and_squash.rst index 9a451c9ccf4..7f329508fcd 100644 --- a/getting_started/first_3d_game/06.jump_and_squash.rst +++ b/getting_started/first_3d_game/06.jump_and_squash.rst @@ -72,7 +72,7 @@ see a list of named checkboxes. |image4| -Next up are the ``Player`` and the ``Mob``. Open ``player.tscn`` by double-clicking +Next up are the ``Player`` and the ``Mob``. Open ``Player.tscn`` by double-clicking the file in the *FileSystem* dock. Select the *Player* node and set its *Collision -> Mask* to both "enemies" and diff --git a/getting_started/first_3d_game/07.killing_player.rst b/getting_started/first_3d_game/07.killing_player.rst index d1fd101b8ec..2262d278e59 100644 --- a/getting_started/first_3d_game/07.killing_player.rst +++ b/getting_started/first_3d_game/07.killing_player.rst @@ -15,7 +15,7 @@ works well for hitboxes. Hitbox with the Area node ------------------------- -Head back to the ``player.tscn`` scene and add a new child node :ref:`Area3D `. Name it +Head back to the ``Player.tscn`` scene and add a new child node :ref:`Area3D `. Name it ``MobDetector`` Add a :ref:`CollisionShape3D ` node as a child of it. From aee7a436a54ba27c099ca1cc3423a9320a525275 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Sun, 30 Jun 2024 08:05:53 -0500 Subject: [PATCH 028/122] Update 2D and 3D example file names to snake case --- getting_started/first_2d_game/03.coding_the_player.rst | 2 +- getting_started/first_2d_game/05.the_main_game_scene.rst | 2 +- getting_started/first_3d_game/02.player_input.rst | 2 +- getting_started/first_3d_game/03.player_movement_code.rst | 4 ++-- getting_started/first_3d_game/04.mob_scene.rst | 4 ++-- getting_started/first_3d_game/06.jump_and_squash.rst | 4 ++-- getting_started/first_3d_game/07.killing_player.rst | 6 +++--- getting_started/first_3d_game/08.score_and_replay.rst | 8 ++++---- getting_started/first_3d_game/09.adding_animations.rst | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/getting_started/first_2d_game/03.coding_the_player.rst b/getting_started/first_2d_game/03.coding_the_player.rst index a6f7f97b895..1b88aa4be82 100644 --- a/getting_started/first_2d_game/03.coding_the_player.rst +++ b/getting_started/first_2d_game/03.coding_the_player.rst @@ -63,7 +63,7 @@ override the value written in the script. .. image:: img/export_variable.webp -Your ``Player.gd`` script should already contain +Your ``player.gd`` script should already contain a ``_ready()`` and a ``_process()`` function. If you didn't select the default template shown above, create these functions while following the lesson. diff --git a/getting_started/first_2d_game/05.the_main_game_scene.rst b/getting_started/first_2d_game/05.the_main_game_scene.rst index aeaa864ceb6..a450ad2f8cb 100644 --- a/getting_started/first_2d_game/05.the_main_game_scene.rst +++ b/getting_started/first_2d_game/05.the_main_game_scene.rst @@ -10,7 +10,7 @@ Create a new scene and add a :ref:`Node ` named ``Main``. be a container for handling game logic. It does not require 2D functionality itself.) Click the **Instance** button (represented by a chain link icon) and select your saved -``Player.tscn``. +``player.tscn``. .. image:: img/instance_scene.webp diff --git a/getting_started/first_3d_game/02.player_input.rst b/getting_started/first_3d_game/02.player_input.rst index 65269471e27..282b722cab3 100644 --- a/getting_started/first_3d_game/02.player_input.rst +++ b/getting_started/first_3d_game/02.player_input.rst @@ -79,7 +79,7 @@ the eye icon next to the ``Character`` or the ``Pivot`` nodes. |image5| -Save the scene as ``Player.tscn`` +Save the scene as ``player.tscn`` With the nodes ready, we can almost get coding. But first, we need to define some input actions. diff --git a/getting_started/first_3d_game/03.player_movement_code.rst b/getting_started/first_3d_game/03.player_movement_code.rst index 6f38febd53e..29d0989b181 100644 --- a/getting_started/first_3d_game/03.player_movement_code.rst +++ b/getting_started/first_3d_game/03.player_movement_code.rst @@ -246,7 +246,7 @@ smooth it out for you. It uses the *velocity* value native to the :ref:`Characte And that's all the code you need to move the character on the floor. -Here is the complete ``Player.gd`` code for reference. +Here is the complete ``player.gd`` code for reference. .. tabs:: .. code-tab:: gdscript GDScript @@ -367,7 +367,7 @@ Child Scene*. |image2| -In the popup, double-click ``Player.tscn``. The character should appear in the +In the popup, double-click ``player.tscn``. The character should appear in the center of the viewport. Adding a camera diff --git a/getting_started/first_3d_game/04.mob_scene.rst b/getting_started/first_3d_game/04.mob_scene.rst index c3113c07ae5..5cc089a9d22 100644 --- a/getting_started/first_3d_game/04.mob_scene.rst +++ b/getting_started/first_3d_game/04.mob_scene.rst @@ -7,7 +7,7 @@ In this part, you're going to code the monsters, which we'll call mobs. In the next lesson, we'll spawn them randomly around the playable area. Let's design the monsters themselves in a new scene. The node structure is going -to be similar to the ``Player.tscn`` scene. +to be similar to the ``player.tscn`` scene. Create a scene with, once again, a :ref:`CharacterBody3D ` node as its root. Name it ``Mob``. Add a child node :ref:`Node3D `, name it ``Pivot``. And drag and drop @@ -252,7 +252,7 @@ method. This function destroys the instance it's called on. Our monster is ready to enter the game! In the next part, you will spawn monsters in the game level. -Here is the complete ``Mob.gd`` script for reference. +Here is the complete ``mob.gd`` script for reference. .. tabs:: .. code-tab:: gdscript GDScript diff --git a/getting_started/first_3d_game/06.jump_and_squash.rst b/getting_started/first_3d_game/06.jump_and_squash.rst index 7f329508fcd..cc2d6c07bc7 100644 --- a/getting_started/first_3d_game/06.jump_and_squash.rst +++ b/getting_started/first_3d_game/06.jump_and_squash.rst @@ -72,7 +72,7 @@ see a list of named checkboxes. |image4| -Next up are the ``Player`` and the ``Mob``. Open ``Player.tscn`` by double-clicking +Next up are the ``Player`` and the ``Mob``. Open ``player.tscn`` by double-clicking the file in the *FileSystem* dock. Select the *Player* node and set its *Collision -> Mask* to both "enemies" and @@ -318,7 +318,7 @@ such as counting the score multiple times for one kill. We are calling one undefined function, ``mob.squash()``, so we have to add it to the Mob class. -Open the script ``Mob.gd`` by double-clicking on it in the *FileSystem* dock. At +Open the script ``mob.gd`` by double-clicking on it in the *FileSystem* dock. At the top of the script, we want to define a new signal named ``squashed``. And at the bottom, you can add the squash function, where we emit the signal and destroy the mob. diff --git a/getting_started/first_3d_game/07.killing_player.rst b/getting_started/first_3d_game/07.killing_player.rst index 2262d278e59..74b22d246b1 100644 --- a/getting_started/first_3d_game/07.killing_player.rst +++ b/getting_started/first_3d_game/07.killing_player.rst @@ -15,7 +15,7 @@ works well for hitboxes. Hitbox with the Area node ------------------------- -Head back to the ``Player.tscn`` scene and add a new child node :ref:`Area3D `. Name it +Head back to the ``player.tscn`` scene and add a new child node :ref:`Area3D `. Name it ``MobDetector`` Add a :ref:`CollisionShape3D ` node as a child of it. @@ -213,7 +213,7 @@ Starting with ``main.gd``. } } -Next is ``Mob.gd``. +Next is ``mob.gd``. .. tabs:: .. code-tab:: gdscript GDScript @@ -308,7 +308,7 @@ Next is ``Mob.gd``. } } -Finally, the longest script, ``Player.gd``: +Finally, the longest script, ``player.gd``: .. tabs:: .. code-tab:: gdscript GDScript diff --git a/getting_started/first_3d_game/08.score_and_replay.rst b/getting_started/first_3d_game/08.score_and_replay.rst index 0037e6447cb..7c97ddfec3f 100644 --- a/getting_started/first_3d_game/08.score_and_replay.rst +++ b/getting_started/first_3d_game/08.score_and_replay.rst @@ -131,7 +131,7 @@ line: This line means that when the mob emits the ``squashed`` signal, the ``ScoreLabel`` node will receive it and call the function ``_on_mob_squashed()``. -Head back to the ``ScoreLabel.gd`` script to define the ``_on_mob_squashed()`` +Head back to the ``score_label.gd`` script to define the ``_on_mob_squashed()`` callback function. There, we increment the score and update the displayed text. @@ -321,18 +321,18 @@ game. |image17| -Save the scene as ``MusicPlayer.tscn``. +Save the scene as ``music_player.tscn``. We have to register it as an autoload. Head to the *Project -> Project Settings…* menu and click on the *Autoload* tab. In the *Path* field, you want to enter the path to your scene. Click the folder -icon to open the file browser and double-click on ``MusicPlayer.tscn``. Then, +icon to open the file browser and double-click on ``music_player.tscn``. Then, click the *Add* button on the right to register the node. |image18| -``MusicPlayer.tscn`` now loads into any scene you open or play. +``music_player.tscn`` now loads into any scene you open or play. So if you run the game now, the music will play automatically in any scene. Before we wrap up this lesson, here's a quick look at how it works under the diff --git a/getting_started/first_3d_game/09.adding_animations.rst b/getting_started/first_3d_game/09.adding_animations.rst index 6f3b602ba59..38ae7f8aa02 100644 --- a/getting_started/first_3d_game/09.adding_animations.rst +++ b/getting_started/first_3d_game/09.adding_animations.rst @@ -298,8 +298,8 @@ And with that, you finished coding your first complete 3D game. **Congratulations**! In the next part, we'll quickly recap what you learned and give you some links -to keep learning more. But for now, here are the complete ``Player.gd`` and -``Mob.gd`` so you can check your code against them. +to keep learning more. But for now, here are the complete ``player.gd`` and +``mob.gd`` so you can check your code against them. Here's the *Player* script. From 10c146368d9fc80a453dac68981072a61e366e38 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 15 Jul 2024 00:43:52 +0200 Subject: [PATCH 029/122] Document baking lightmaps on Android/web editor is not supported This also removes a duplicated heading. --- tutorials/3d/global_illumination/using_lightmap_gi.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tutorials/3d/global_illumination/using_lightmap_gi.rst b/tutorials/3d/global_illumination/using_lightmap_gi.rst index 37a88c05ae3..e25b4624f3c 100644 --- a/tutorials/3d/global_illumination/using_lightmap_gi.rst +++ b/tutorials/3d/global_illumination/using_lightmap_gi.rst @@ -60,9 +60,6 @@ Visual comparison but lower quality visuals. Notice the blurrier sun shadow in the top-right corner. -Visual comparison ------------------ - Here are some comparisons of how LightmapGI vs. VoxelGI look. Notice that lightmaps are more accurate, but also suffer from the fact that lighting is on an unwrapped texture, so transitions and resolution may not @@ -77,6 +74,12 @@ large open worlds without any need for baking. Setting up ---------- +.. warning:: + + Baking lightmaps in the Android and web editors is not supported due to + graphics API limitations on those devices. On Android and web platforms, + only *rendering* lightmaps that were baked on a desktop PC is supported. + First of all, before the lightmapper can do anything, the objects to be baked need a UV2 layer and a texture size. A UV2 layer is a set of secondary texture coordinates that ensures any face in the object has its own place in the UV map. Faces must From 00b59434eba18509a8d083cc49dbd33b90b4cc37 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sun, 14 Jul 2024 21:15:43 +0200 Subject: [PATCH 030/122] Link to class reference BBCode syntax subset in BBCode in RichTextLabel --- tutorials/ui/bbcode_in_richtextlabel.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tutorials/ui/bbcode_in_richtextlabel.rst b/tutorials/ui/bbcode_in_richtextlabel.rst index 5250e33524f..55fa0ba3cee 100644 --- a/tutorials/ui/bbcode_in_richtextlabel.rst +++ b/tutorials/ui/bbcode_in_richtextlabel.rst @@ -223,6 +223,12 @@ The following script will result in the same visual output as using Reference --------- +.. seealso:: + + *Some* of these BBCode tags can be used in tooltips for ``@export`` script + variables as well as in the XML source of the class reference. For more + information, see :ref:`Class reference BBCode `. + .. list-table:: :class: wrap-normal :width: 100% From 73f9d0da018cc919794730ce6f6165595f428637 Mon Sep 17 00:00:00 2001 From: Mark DiBarry Date: Mon, 8 Jul 2024 18:59:21 -0400 Subject: [PATCH 031/122] Add 2D Parallax documentation page --- tutorials/2d/2d_parallax.rst | 231 ++++++++++++++++++ tutorials/2d/img/2d_parallax_repeat_bad.webp | Bin 0 -> 14338 bytes tutorials/2d/img/2d_parallax_repeat_good.webp | Bin 0 -> 13712 bytes .../img/2d_parallax_repeat_good_norect.webp | Bin 0 -> 12312 bytes tutorials/2d/img/2d_parallax_scroll.gif | Bin 0 -> 1773679 bytes .../2d/img/2d_parallax_single_centered.webp | Bin 0 -> 12274 bytes .../2d/img/2d_parallax_single_expand.webp | Bin 0 -> 12730 bytes tutorials/2d/img/2d_parallax_size_bad.webp | Bin 0 -> 12896 bytes tutorials/2d/img/2d_parallax_size_repeat.webp | Bin 0 -> 13006 bytes tutorials/2d/img/2d_parallax_size_scale.webp | Bin 0 -> 12734 bytes .../2d/img/2d_parallax_size_viewport.webp | Bin 0 -> 12144 bytes tutorials/2d/img/2d_parallax_splitscreen.webp | Bin 0 -> 28078 bytes .../img/2d_parallax_zoom_repeat_adjusted.webp | Bin 0 -> 16780 bytes .../2d/img/2d_parallax_zoom_repeat_times.webp | Bin 0 -> 16704 bytes tutorials/2d/img/2d_parallax_zoom_single.webp | Bin 0 -> 12566 bytes tutorials/2d/index.rst | 1 + .../2d/video/2d_parallax_scroll_scale.webm | Bin 0 -> 957027 bytes 17 files changed, 232 insertions(+) create mode 100644 tutorials/2d/2d_parallax.rst create mode 100644 tutorials/2d/img/2d_parallax_repeat_bad.webp create mode 100644 tutorials/2d/img/2d_parallax_repeat_good.webp create mode 100644 tutorials/2d/img/2d_parallax_repeat_good_norect.webp create mode 100644 tutorials/2d/img/2d_parallax_scroll.gif create mode 100644 tutorials/2d/img/2d_parallax_single_centered.webp create mode 100644 tutorials/2d/img/2d_parallax_single_expand.webp create mode 100644 tutorials/2d/img/2d_parallax_size_bad.webp create mode 100644 tutorials/2d/img/2d_parallax_size_repeat.webp create mode 100644 tutorials/2d/img/2d_parallax_size_scale.webp create mode 100644 tutorials/2d/img/2d_parallax_size_viewport.webp create mode 100644 tutorials/2d/img/2d_parallax_splitscreen.webp create mode 100644 tutorials/2d/img/2d_parallax_zoom_repeat_adjusted.webp create mode 100644 tutorials/2d/img/2d_parallax_zoom_repeat_times.webp create mode 100644 tutorials/2d/img/2d_parallax_zoom_single.webp create mode 100644 tutorials/2d/video/2d_parallax_scroll_scale.webm diff --git a/tutorials/2d/2d_parallax.rst b/tutorials/2d/2d_parallax.rst new file mode 100644 index 00000000000..5702a89f1cb --- /dev/null +++ b/tutorials/2d/2d_parallax.rst @@ -0,0 +1,231 @@ +.. doc_2d_parallax: + +2D Parallax +=========== + +Introduction +------------ + +Parallax is an effect used to simulate depth by having textures move at different speeds relative to the camera. Godot +provides the :ref:`Parallax2D` node to achieve this effect. It can still be easy to get tripped +up though, so this page provides in-depth descriptions of some properties and how to fix some common mistakes. + +.. note:: + This page only covers how to use :ref:`Parallax2D`. This node is still experimental, so the + implementation might change in future versions of Godot. However, it is still recommended to use over the + :ref:`ParallaxLayer` and :ref:`ParallaxBackground` nodes. + +Scroll scale +------------ + +The backbone of the parallax effect is the :ref:`scroll_scale ` property. +It works as a scroll-speed multiplier, allowing layers to move at a different speed than the camera for each axis set. +A value of 1 makes the parallax node scroll at the same speed as the camera. If you want your image to look further away +when scrolling, use a value lower than 1, with 0 bringing it to a complete stop. If you want something to appear closer +to the camera, use a value higher than 1, making it scroll faster. + +.. image:: img/2d_parallax_size_viewport.webp + +The scene above is comprised of five layers. Some good :ref:`scroll_scale ` +values might be: + +- ``(0.7, 1)`` - Forest +- ``(0.5, 1)`` - Hills +- ``(0.3, 1)`` - Lower Clouds +- ``(0.2, 1)`` - Higher Clouds +- ``(0.1, 1)`` - Sky + +The video below displays how these values affect scrolling while in-game: + +.. video:: video/2d_parallax_scroll_scale.webm + :alt: A scene with five layers scrolling at different speeds + :autoplay: + :loop: + :muted: + +Infinite repeat +--------------- + +:ref:`Parallax2D` provides a bonus effect that gives textures the illusion of repeating infinitely. +:ref:`repeat_size` tells the node to snap its position forward or back when the +camera scrolls by the set value. This effect is achieved by adding a single repeat to all the child canvas items offset +by the value. While the camera scrolls between the image and its repeat, it invisibly snaps back giving the appearance +of a looping image. + +.. image:: img/2d_parallax_scroll.gif + +Being a delicate effect, it's easy for unfamiliar users to make mistakes with their setup. Let's go over the "how" and +"why" of a few common problems users encounter. + +Poor sizing +~~~~~~~~~~~ + +The infinite repeat effect is easiest to work with when you have an image designed to repeat seamlessly and is the same +size or larger than your viewport **before** setting the :ref:`repeat_size`. If +you aren't able to obtain assets that are designed for this task, there are some other things you can do to better +prepare your image in regards to size. + +Here is an example of a texture that is too small for its viewport: + +.. image:: img/2d_parallax_size_bad.webp + +We can see that the viewport size is 500x300 but the texture is 288x208. If we set the +:ref:`repeat_size` to the size of our image, the infinite repeat effect doesn't +scroll properly because the original texture doesn't cover the viewport. If we set the +:ref:`repeat_size` to the size of the viewport, we have a large gap. What can we +do? + +Make the viewport smaller +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The simplest answer is to make the viewport the same size or smaller than your textures. Click on +``Project -> Project Settings -> Window`` and change the viewport height and width to match your background. + +.. image:: img/2d_parallax_size_viewport.webp + +Scale the Parallax2D +^^^^^^^^^^^^^^^^^^^^ + +If you're not aiming for a pixel-perfect style, or don't mind a little blurriness, you may opt to scale the textures +larger to fit your screen. Set the :ref:`scale` of the :ref:`Parallax2D`, +and all child textures scale with it. + +Scale the child nodes +^^^^^^^^^^^^^^^^^^^^^ + +Similar to scaling the :ref:`Parallax2D`, you can scale your :ref:`Sprite2D` nodes to +be large enough to cover the screen. Keep in mind that some settings like +:ref:`Parallax2D.repeat_size` and +:ref:`Sprite2D.region_rect` do not take scaling into account, so it's necessary to +adjust these values based on the scale. + +.. image:: img/2d_parallax_size_scale.webp + +Repeat the textures +^^^^^^^^^^^^^^^^^^^ + +You can also start off on the right foot by preparing child nodes earlier in the process. If you have a +:ref:`Sprite2D` you'd like to repeat, but is too small, you can do the following to repeat it: + +- set :ref:`texture_repeat` to :ref:`CanvasItem.TEXTURE_REPEAT_ENABLED` +- set :ref:`region_enabled` to ``true`` +- set the :ref:`region_rect` to a multiple of the size of your texture large enough to cover the viewport. + +Below, you can see that repeating the image twice makes it large enough to cover the screen. + +.. image:: img/2d_parallax_size_repeat.webp + +Poor positioning +~~~~~~~~~~~~~~~~ + +It's common to see users mistakenly set all of their textures to be centered at ``(0,0)``: + +.. image:: img/2d_parallax_single_centered.webp + +This creates problems with the infinite repeat effect and should be avoided. The "infinite repeat canvas" starts at +``(0,0)`` and expands down and to the right to the size of the :ref:`repeat_size` +value. + +.. image:: img/2d_parallax_single_expand.webp + +If the textures are centered on the ``(0,0)`` crossing, the infinite repeat canvas is only partly covered, so it +only partly repeats. + +Would increasing ``repeat_times`` fix this? +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Increasing :ref:`repeat_times` technically *would* work in some scenarios, but +is a brute force solution and not the problem it is designed to solve (we'll go over this in a bit). A better fix is to +understand how the repeat effect works and set up the parallax textures appropriately to begin with. + +First, check to see if any textures are spilling over onto the negative parts of the canvas. Make sure the textures +used in the parallax nodes fit inside the "infinite repeat canvas" starting at ``(0,0)``. That way, if +:ref:`Parallax2D.repeat_size` is set correctly, it should look something like +this, with one single loop of the image the same size or larger than the viewport: + +.. image:: img/2d_parallax_repeat_good_norect.webp + +If you think of how the image scrolls across the screen, it starts by displaying what's inside the red rectangle +(determined by :ref:`repeat_size`), and when it reaches what's inside the yellow +rectangle it zips the image forward to give the illusion of scrolling forever. + +.. image:: img/2d_parallax_repeat_good.webp + +If you have the image positioned away from the "infinite repeat canvas", when the camera reaches the yellow rectangle, +half of the image is cut off before it jumps forward like in the image below: + +.. image:: img/2d_parallax_repeat_bad.webp + +Scroll offset +------------- + +If your parallax textures are already working correctly, but you prefer it to start at a different point, +:ref:`Parallax2D` comes with a :ref:`scroll_offset` property +used to offset where the infinite repeat canvas starts. As an example, if your image is 288x208, setting +the :ref:`scroll_offset` to ``(-144,0)`` or ``(144,0)`` allows it to begin +halfway across the image. + +Repeat times +------------ + +Ideally, following this guide, your parallax textures are large enough to cover the screen even when zoomed out. +Until now, we have had a perfectly fitting 288x208 texture inside of a 288x208 viewport. However, problems +occur when we zoom out by setting the :ref:`Camera2D.zoom` to ``(0.5, 0.5)``: + +.. image:: img/2d_parallax_zoom_single.webp + +Even though everything is correctly set for the viewport at the default zoom level, zooming out makes it smaller than +the viewport, breaking the infinite repeat effect. This is where +:ref:`repeat_times` can help out. Setting a value of ``3`` (one extra +repeat behind and in front), it is now large enough to accommodate the infinite repeat effect. + +.. image:: img/2d_parallax_zoom_repeat_times.webp + +If these textures were meant to be repeated vertically, we would have specified a ``y`` value for the +:ref:`repeat_size`. The +:ref:`repeat_times` would automatically add a repeat above and below as well. +This is only a horizontal parallax, so it leaves an empty block above and below the image. How do we solve this? We +need to get creative! In this example, we stretch the sky higher, and grass sprite lower. The textures now support the +normal zoom level and zooming out to half size. + +.. image:: img/2d_parallax_zoom_repeat_adjusted.webp + +Split screen +------------ + +Most tutorials for making a split screen game in Godot begin by writing a small script to assign +the :ref:`Viewport.world_2d` of the first SubViewport to the second, so they have a +shared display. Questions often pop up about how to share a parallax effect between both screens. + +The parallax effect fakes a perspective by moving the positions of different textures in relation to the camera. This is +understandably problematic if you have multiple cameras, because your textures can't be in two places at once! + +This is still achievable by cloning the parallax nodes into the second (or third or fourth) +:ref:`SubViewport`. Here's how it looks for a two player game: + +.. image:: img/2d_parallax_splitscreen.webp + +Of course, now both backgrounds show in both SubViewports. What we want is for some nodes to be visible in one viewport +but not another. While technically possible, this is not a feature officially supported by Godot at the moment. There is +currently a proposal to make this much simpler, so please stay tuned. + +As a workaround, you can do the following: + +- Set the first SubViewport's :ref:`canvas_cull_mask` to only layer 1, so it displays all nodes with a :ref:`visibility_layer` of layer 1. +- Set the second SubViewport's :ref:`canvas_cull_mask` to only layer 2, so it displays all nodes with a :ref:`visibility_layer` of layer 2. +- Set the :ref:`visibility_layer` of every node you want to display in both viewports to both layers 1 and 2. +- Set the :ref:`visibility_layer` of the :ref:`Parallax2D` node and all its descendants in the first :ref:`SubViewport` to layer 1. +- Set the :ref:`visibility_layer` of the :ref:`Parallax2D` node and all its descendants in the second :ref:`SubViewport` to layer 2. + +Previewing in the editor +------------------------ + +Prior to 4.3, the recommendation was to place every layer in their own +:ref:`ParallaxBackground`, enable the +:ref:`follow_viewport_enabled` property, and scale the individual +layer. This method has always been tricky to get right, but is still achievable by using a +:ref:`CanvasLayer` instead of a :ref:`ParallaxBackground`. + +.. note:: + Another recommendation is `KoBeWi's "Parallax2D Preview" addon `_. + It provides a few different preview modes and is very handy! diff --git a/tutorials/2d/img/2d_parallax_repeat_bad.webp b/tutorials/2d/img/2d_parallax_repeat_bad.webp new file mode 100644 index 0000000000000000000000000000000000000000..5b1625be39e201ddee0e13c2ad3349cf6dc0e68d GIT binary patch literal 14338 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 literal 0 HcmV?d00001 diff --git a/tutorials/2d/img/2d_parallax_repeat_good.webp b/tutorials/2d/img/2d_parallax_repeat_good.webp new file mode 100644 index 0000000000000000000000000000000000000000..9ea89714d1d6ca43c147973d8cbe1f69c3f1079f GIT binary patch literal 13712 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 literal 0 HcmV?d00001 diff --git a/tutorials/2d/img/2d_parallax_scroll.gif b/tutorials/2d/img/2d_parallax_scroll.gif new file mode 100644 index 0000000000000000000000000000000000000000..426d4e285269b6ccd8aaae6f93f06a5b0e8ebbf8 GIT binary patch literal 1773679 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

Tv1dU)HG)ii#h3 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%0DT6ps{C0Q{ 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