瀏覽代碼

classref: Sync with current master branch (bbac8198f)

Rémi Verschelde 2 年之前
父節點
當前提交
b69855897a
共有 100 個文件被更改,包括 3330 次插入1283 次删除
  1. 9 5
      classes/[email protected]
  2. 10 6
      classes/[email protected]
  3. 1 0
      classes/class_aescontext.rst
  4. 10 4
      classes/class_animatedsprite2d.rst
  5. 11 5
      classes/class_animatedsprite3d.rst
  6. 1 1
      classes/class_animationlibrary.rst
  7. 9 0
      classes/class_animationnodeblendtree.rst
  8. 17 35
      classes/class_animationnodestatemachinetransition.rst
  9. 10 2
      classes/class_animationplayer.rst
  10. 9 0
      classes/class_animationtree.rst
  11. 175 101
      classes/class_array.rst
  12. 17 3
      classes/class_astargrid2d.rst
  13. 9 7
      classes/class_atlastexture.rst
  14. 19 19
      classes/class_audiostreamplayer3d.rst
  15. 1 1
      classes/class_basematerial3d.rst
  16. 1 1
      classes/class_basis.rst
  17. 10 0
      classes/class_callable.rst
  18. 99 61
      classes/class_camera2d.rst
  19. 8 6
      classes/class_canvasitem.rst
  20. 29 9
      classes/class_collisionshape2d.rst
  21. 89 7
      classes/class_colorpicker.rst
  22. 15 15
      classes/class_control.rst
  23. 2 2
      classes/class_cubemap.rst
  24. 11 0
      classes/class_cubemaparray.rst
  25. 481 0
      classes/class_diraccess.rst
  26. 0 381
      classes/class_directory.rst
  27. 57 23
      classes/class_displayserver.rst
  28. 3 3
      classes/class_editorimportplugin.rst
  29. 16 0
      classes/class_editorinspector.rst
  30. 11 11
      classes/class_editornode3dgizmo.rst
  31. 2 2
      classes/class_editornode3dgizmoplugin.rst
  32. 24 24
      classes/class_editorplugin.rst
  33. 10 0
      classes/class_editorproperty.rst
  34. 1 1
      classes/class_editorscenepostimport.rst
  35. 1 1
      classes/class_editorscript.rst
  36. 5 5
      classes/class_editorsettings.rst
  37. 2 2
      classes/class_editortranslationparserplugin.rst
  38. 91 23
      classes/class_engine.rst
  39. 17 7
      classes/class_environment.rst
  40. 225 210
      classes/class_fileaccess.rst
  41. 1 1
      classes/class_filesystemdock.rst
  42. 8 6
      classes/class_fogmaterial.rst
  43. 6 4
      classes/class_fogvolume.rst
  44. 11 1
      classes/class_font.rst
  45. 11 1
      classes/class_geometry2d.rst
  46. 30 15
      classes/class_gltfdocumentextension.rst
  47. 10 0
      classes/class_gltfnode.rst
  48. 97 67
      classes/class_gltfstate.rst
  49. 21 3
      classes/class_gltftexture.rst
  50. 105 0
      classes/class_gltftexturesampler.rst
  51. 1 1
      classes/class_gridmap.rst
  52. 9 9
      classes/class_hmaccontext.rst
  53. 29 15
      classes/class_hslider.rst
  54. 0 2
      classes/class_image.rst
  55. 48 0
      classes/class_imageformatloader.rst
  56. 75 0
      classes/class_imageformatloaderextension.rst
  57. 12 0
      classes/class_imagetexturelayered.rst
  58. 1 1
      classes/class_inputeventwithmodifiers.rst
  59. 34 12
      classes/class_json.rst
  60. 6 6
      classes/class_lightmapgi.rst
  61. 10 0
      classes/class_menubutton.rst
  62. 1 1
      classes/class_multiplayerapiextension.rst
  63. 2 2
      classes/class_multiplayersynchronizer.rst
  64. 1 1
      classes/class_navigationobstacle2d.rst
  65. 1 1
      classes/class_navigationobstacle3d.rst
  66. 164 0
      classes/class_navigationpathqueryparameters2d.rst
  67. 164 0
      classes/class_navigationpathqueryparameters3d.rst
  68. 67 0
      classes/class_navigationpathqueryresult2d.rst
  69. 67 0
      classes/class_navigationpathqueryresult3d.rst
  70. 2 0
      classes/class_navigationregion2d.rst
  71. 2 0
      classes/class_navigationregion3d.rst
  72. 10 0
      classes/class_navigationserver2d.rst
  73. 10 0
      classes/class_navigationserver3d.rst
  74. 31 5
      classes/class_node.rst
  75. 4 0
      classes/class_node2d.rst
  76. 8 2
      classes/class_node3d.rst
  77. 124 0
      classes/class_openxrhand.rst
  78. 10 0
      classes/class_optionbutton.rst
  79. 64 14
      classes/class_os.rst
  80. 3 3
      classes/class_packedbytearray.rst
  81. 2 2
      classes/class_packedscene.rst
  82. 2 2
      classes/class_panoramaskymaterial.rst
  83. 17 13
      classes/class_physicsbody2d.rst
  84. 21 17
      classes/class_physicsbody3d.rst
  85. 14 0
      classes/class_physicsdirectbodystate3d.rst
  86. 8 0
      classes/class_physicsdirectbodystate3dextension.rst
  87. 20 0
      classes/class_physicsserver2d.rst
  88. 18 2
      classes/class_physicsserver2dextension.rst
  89. 20 0
      classes/class_physicsserver3d.rst
  90. 18 2
      classes/class_physicsserver3dextension.rst
  91. 2 2
      classes/class_physicstestmotionparameters2d.rst
  92. 2 2
      classes/class_physicstestmotionparameters3d.rst
  93. 4 2
      classes/class_planemesh.rst
  94. 344 74
      classes/class_projectsettings.rst
  95. 43 0
      classes/class_quadmesh.rst
  96. 1 1
      classes/class_quaternion.rst
  97. 0 0
      classes/class_refcounted.rst
  98. 0 0
      classes/class_resource.rst
  99. 2 2
      classes/class_resourcesaver.rst
  100. 14 6
      classes/class_scripteditorbase.rst

+ 9 - 5
classes/[email protected]

@@ -328,7 +328,7 @@ See also :ref:`@GlobalScope.PROPERTY_HINT_GLOBAL_FILE<class_@GlobalScope_constan
 
 
 Define a new group for the following exported properties. This helps to organize properties in the Inspector dock. Groups can be added with an optional ``prefix``, which would make group to only consider properties that have this prefix. The grouping will break on the first property that doesn't have a prefix. The prefix is also removed from the property's name in the Inspector dock.
 Define a new group for the following exported properties. This helps to organize properties in the Inspector dock. Groups can be added with an optional ``prefix``, which would make group to only consider properties that have this prefix. The grouping will break on the first property that doesn't have a prefix. The prefix is also removed from the property's name in the Inspector dock.
 
 
-If no ``prefix`` is provided, the every following property is added to the group. The group ends when then next group or category is defined. You can also force end a group by using this annotation with empty strings for paramters, ``@export_group("", "")``.
+If no ``prefix`` is provided, the every following property is added to the group. The group ends when then next group or category is defined. You can also force end a group by using this annotation with empty strings for parameters, ``@export_group("", "")``.
 
 
 Groups cannot be nested, use :ref:`@export_subgroup<class_@GDScript_annotation_@export_subgroup>` to add subgroups to your groups.
 Groups cannot be nested, use :ref:`@export_subgroup<class_@GDScript_annotation_@export_subgroup>` to add subgroups to your groups.
 
 
@@ -397,7 +397,7 @@ See also :ref:`@GlobalScope.PROPERTY_HINT_PLACEHOLDER_TEXT<class_@GlobalScope_co
 
 
 Export a numeric property as a range value. The range must be defined by ``min`` and ``max``, as well as an optional ``step`` and a variety of extra hints. The ``step`` defaults to ``1`` for integer properties. For floating-point numbers this value depends on your ``EditorSettings.interface/inspector/default_float_step`` setting.
 Export a numeric property as a range value. The range must be defined by ``min`` and ``max``, as well as an optional ``step`` and a variety of extra hints. The ``step`` defaults to ``1`` for integer properties. For floating-point numbers this value depends on your ``EditorSettings.interface/inspector/default_float_step`` setting.
 
 
-If hints ``"or_greater"`` and ``"or_less"`` are provided, the editor widget will not cap the value at range boundaries. The ``"exp"`` hint will make the edited values on range to change exponentially. The ``"no_slider"`` hint will hide the slider element of the editor widget.
+If hints ``"or_greater"`` and ``"or_less"`` are provided, the editor widget will not cap the value at range boundaries. The ``"exp"`` hint will make the edited values on range to change exponentially. The ``"hide_slider"`` hint will hide the slider element of the editor widget.
 
 
 Hints also allow to indicate the units for the edited value. Using ``"radians"`` you can specify that the actual value is in radians, but should be displayed in degrees in the Inspector dock. ``"degrees"`` allows to add a degree sign as a unit suffix. Finally, a custom suffix can be provided using ``"suffix:unit"``, where "unit" can be any string.
 Hints also allow to indicate the units for the edited value. Using ``"radians"`` you can specify that the actual value is in radians, but should be displayed in degrees in the Inspector dock. ``"degrees"`` allows to add a degree sign as a unit suffix. Finally, a custom suffix can be provided using ``"suffix:unit"``, where "unit" can be any string.
 
 
@@ -458,7 +458,7 @@ Add a custom icon to the current script. The icon is displayed in the Scene dock
 
 
 - **@onready** **(** **)**
 - **@onready** **(** **)**
 
 
-Mark the following property as assigned on :ref:`Node<class_Node>`'s ready state change. Values for these properties are no assigned immediately upon the node's creation, and instead are computed and stored right before :ref:`Node._ready<class_Node_method__ready>`.
+Mark the following property as assigned on :ref:`Node<class_Node>`'s ready state change. Values for these properties are not assigned immediately upon the node's creation, and instead are computed and stored right before :ref:`Node._ready<class_Node_method__ready>`.
 
 
 ::
 ::
 
 
@@ -592,7 +592,7 @@ Converts a ``dictionary`` (previously created with :ref:`inst_to_dict<class_@GDS
 
 
 - :ref:`Array<class_Array>` **get_stack** **(** **)**
 - :ref:`Array<class_Array>` **get_stack** **(** **)**
 
 
-Returns an array of dictionaries representing the current call stack.
+Returns an array of dictionaries representing the current call stack. See also :ref:`print_stack<class_@GDScript_method_print_stack>`.
 
 
 ::
 ::
 
 
@@ -611,6 +611,8 @@ would print
 
 
     [{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]
     [{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]
 
 
+\ **Note:** :ref:`get_stack<class_@GDScript_method_get_stack>` only works if the running instance is connected to a debugging server (i.e. an editor instance). :ref:`get_stack<class_@GDScript_method_get_stack>` will not work in projects exported in release mode, or in projects exported in debug mode if not connected to a debugging server.
+
 \ **Note:** Not supported for calling from threads. Instead, this will return an empty array.
 \ **Note:** Not supported for calling from threads. Instead, this will return an empty array.
 
 
 ----
 ----
@@ -710,7 +712,7 @@ Output in the console would look something like this:
 
 
 - void **print_stack** **(** **)**
 - void **print_stack** **(** **)**
 
 
-Prints a stack trace at the current code location. Only works when running with debugger turned on.
+Prints a stack trace at the current code location. See also :ref:`get_stack<class_@GDScript_method_get_stack>`.
 
 
 Output in the console would look something like this:
 Output in the console would look something like this:
 
 
@@ -718,6 +720,8 @@ Output in the console would look something like this:
 
 
     Frame 0 - res://test.gd:16 in function '_process'
     Frame 0 - res://test.gd:16 in function '_process'
 
 
+\ **Note:** :ref:`print_stack<class_@GDScript_method_print_stack>` only works if the running instance is connected to a debugging server (i.e. an editor instance). :ref:`print_stack<class_@GDScript_method_print_stack>` will not work in projects exported in release mode, or in projects exported in debug mode if not connected to a debugging server.
+
 \ **Note:** Not supported for calling from threads. Instead of the stack trace, this will print the thread ID.
 \ **Note:** Not supported for calling from threads. Instead of the stack trace, this will print the thread ID.
 
 
 ----
 ----

+ 10 - 6
classes/[email protected]

@@ -1621,9 +1621,9 @@ enum **MouseButton**:
 
 
 - **MOUSE_BUTTON_NONE** = **0** --- Enum value which doesn't correspond to any mouse button. This is used to initialize :ref:`MouseButton<enum_@GlobalScope_MouseButton>` properties with a generic state.
 - **MOUSE_BUTTON_NONE** = **0** --- Enum value which doesn't correspond to any mouse button. This is used to initialize :ref:`MouseButton<enum_@GlobalScope_MouseButton>` properties with a generic state.
 
 
-- **MOUSE_BUTTON_LEFT** = **1** --- Left mouse button.
+- **MOUSE_BUTTON_LEFT** = **1** --- Primary mouse button, usually the left button.
 
 
-- **MOUSE_BUTTON_RIGHT** = **2** --- Right mouse button.
+- **MOUSE_BUTTON_RIGHT** = **2** --- Secondary mouse button, usually the right button.
 
 
 - **MOUSE_BUTTON_MIDDLE** = **3** --- Middle mouse button.
 - **MOUSE_BUTTON_MIDDLE** = **3** --- Middle mouse button.
 
 
@@ -1639,9 +1639,9 @@ enum **MouseButton**:
 
 
 - **MOUSE_BUTTON_XBUTTON2** = **9** --- Extra mouse button 2 (only present on some mice).
 - **MOUSE_BUTTON_XBUTTON2** = **9** --- Extra mouse button 2 (only present on some mice).
 
 
-- **MOUSE_BUTTON_MASK_LEFT** = **1** --- Left mouse button mask.
+- **MOUSE_BUTTON_MASK_LEFT** = **1** --- Primary mouse button mask, usually for the left button.
 
 
-- **MOUSE_BUTTON_MASK_RIGHT** = **2** --- Right mouse button mask.
+- **MOUSE_BUTTON_MASK_RIGHT** = **2** --- Secondary mouse button mask, usually for the right button.
 
 
 - **MOUSE_BUTTON_MASK_MIDDLE** = **4** --- Middle mouse button mask.
 - **MOUSE_BUTTON_MASK_MIDDLE** = **4** --- Middle mouse button mask.
 
 
@@ -2200,11 +2200,11 @@ enum **PropertyHint**:
 
 
 - **PROPERTY_HINT_RANGE** = **1** --- Hints that an integer or float property should be within a range specified via the hint string ``"min,max"`` or ``"min,max,step"``. The hint string can optionally include ``"or_greater"`` and/or ``"or_less"`` to allow manual input going respectively above the max or below the min values. Example: ``"-360,360,1,or_greater,or_less"``.
 - **PROPERTY_HINT_RANGE** = **1** --- Hints that an integer or float property should be within a range specified via the hint string ``"min,max"`` or ``"min,max,step"``. The hint string can optionally include ``"or_greater"`` and/or ``"or_less"`` to allow manual input going respectively above the max or below the min values. Example: ``"-360,360,1,or_greater,or_less"``.
 
 
-Additionally, other keywords can be included: ``"exp"`` for exponential range editing, ``"radians"`` for editing radian angles in degrees, ``"degrees"`` to hint at an angle and ``"no_slider"`` to hide the slider.
+Additionally, other keywords can be included: ``"exp"`` for exponential range editing, ``"radians"`` for editing radian angles in degrees, ``"degrees"`` to hint at an angle and ``"hide_slider"`` to hide the slider.
 
 
 - **PROPERTY_HINT_ENUM** = **2** --- Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string.
 - **PROPERTY_HINT_ENUM** = **2** --- Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string.
 
 
-The hint string is a comma separated list of names such as ``"Hello,Something,Else"``. For integer and float properties, the first name in the list has value 0, the next 1, and so on. Explicit values can also be specified by appending ``:integer`` to the name, e.g. ``"Zero,One,Three:3,Four,Six:6"``.
+The hint string is a comma separated list of names such as ``"Hello,Something,Else"``. Whitespaces are **not** removed from either end of a name. For integer and float properties, the first name in the list has value 0, the next 1, and so on. Explicit values can also be specified by appending ``:integer`` to the name, e.g. ``"Zero,One,Three:3,Four,Six:6"``.
 
 
 - **PROPERTY_HINT_ENUM_SUGGESTION** = **3** --- Hints that a string property can be an enumerated value to pick in a list specified via a hint string such as ``"Hello,Something,Else"``.
 - **PROPERTY_HINT_ENUM_SUGGESTION** = **3** --- Hints that a string property can be an enumerated value to pick in a list specified via a hint string such as ``"Hello,Something,Else"``.
 
 
@@ -2367,6 +2367,8 @@ Unlike :ref:`PROPERTY_HINT_ENUM<class_@GlobalScope_constant_PROPERTY_HINT_ENUM>`
 
 
 .. _class_@GlobalScope_constant_PROPERTY_USAGE_EDITOR_BASIC_SETTING:
 .. _class_@GlobalScope_constant_PROPERTY_USAGE_EDITOR_BASIC_SETTING:
 
 
+.. _class_@GlobalScope_constant_PROPERTY_USAGE_READ_ONLY:
+
 .. _class_@GlobalScope_constant_PROPERTY_USAGE_ARRAY:
 .. _class_@GlobalScope_constant_PROPERTY_USAGE_ARRAY:
 
 
 .. _class_@GlobalScope_constant_PROPERTY_USAGE_DEFAULT:
 .. _class_@GlobalScope_constant_PROPERTY_USAGE_DEFAULT:
@@ -2433,6 +2435,8 @@ enum **PropertyUsageFlags**:
 
 
 - **PROPERTY_USAGE_EDITOR_BASIC_SETTING** = **134217728**
 - **PROPERTY_USAGE_EDITOR_BASIC_SETTING** = **134217728**
 
 
+- **PROPERTY_USAGE_READ_ONLY** = **268435456** --- The property is read-only in the editor inspector.
+
 - **PROPERTY_USAGE_ARRAY** = **536870912**
 - **PROPERTY_USAGE_ARRAY** = **536870912**
 
 
 - **PROPERTY_USAGE_DEFAULT** = **6** --- Default usage (storage, editor and network).
 - **PROPERTY_USAGE_DEFAULT** = **6** --- Default usage (storage, editor and network).

+ 1 - 0
classes/class_aescontext.rst

@@ -63,6 +63,7 @@ This class provides access to AES encryption/decryption of raw data. Both AES-EC
     public class Example : Node
     public class Example : Node
     {
     {
         public AESContext Aes = new AESContext();
         public AESContext Aes = new AESContext();
+    
         public override void _Ready()
         public override void _Ready()
         {
         {
             string key = "My secret key!!!"; // Key must be either 16 or 32 bytes.
             string key = "My secret key!!!"; // Key must be either 16 or 32 bytes.

+ 10 - 4
classes/class_animatedsprite2d.rst

@@ -19,6 +19,10 @@ Description
 
 
 ``AnimatedSprite2D`` is similar to the :ref:`Sprite2D<class_Sprite2D>` node, except it carries multiple textures as animation frames. Animations are created using a :ref:`SpriteFrames<class_SpriteFrames>` resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The :ref:`SpriteFrames<class_SpriteFrames>` resource can be configured in the editor via the SpriteFrames bottom panel.
 ``AnimatedSprite2D`` is similar to the :ref:`Sprite2D<class_Sprite2D>` node, except it carries multiple textures as animation frames. Animations are created using a :ref:`SpriteFrames<class_SpriteFrames>` resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The :ref:`SpriteFrames<class_SpriteFrames>` resource can be configured in the editor via the SpriteFrames bottom panel.
 
 
+After setting up :ref:`frames<class_AnimatedSprite2D_property_frames>`, :ref:`play<class_AnimatedSprite2D_method_play>` may be called. It's also possible to select an :ref:`animation<class_AnimatedSprite2D_property_animation>` and toggle :ref:`playing<class_AnimatedSprite2D_property_playing>`, even within the editor.
+
+To pause the current animation, call :ref:`stop<class_AnimatedSprite2D_method_stop>` or set :ref:`playing<class_AnimatedSprite2D_property_playing>` to ``false``. Alternatively, setting :ref:`speed_scale<class_AnimatedSprite2D_property_speed_scale>` to ``0`` also preserves the current frame's elapsed time.
+
 \ **Note:** You can associate a set of normal or specular maps by creating additional :ref:`SpriteFrames<class_SpriteFrames>` resources with a ``_normal`` or ``_specular`` suffix. For example, having 3 :ref:`SpriteFrames<class_SpriteFrames>` resources ``run``, ``run_normal``, and ``run_specular`` will make it so the ``run`` animation uses normal and specular maps.
 \ **Note:** You can associate a set of normal or specular maps by creating additional :ref:`SpriteFrames<class_SpriteFrames>` resources with a ``_normal`` or ``_specular`` suffix. For example, having 3 :ref:`SpriteFrames<class_SpriteFrames>` resources ``run``, ``run_normal``, and ``run_specular`` will make it so the ``run`` animation uses normal and specular maps.
 
 
 Tutorials
 Tutorials
@@ -202,7 +206,7 @@ The texture's drawing offset.
 | *Getter*  | is_playing()       |
 | *Getter*  | is_playing()       |
 +-----------+--------------------+
 +-----------+--------------------+
 
 
-If ``true``, the :ref:`animation<class_AnimatedSprite2D_property_animation>` is currently playing.
+If ``true``, the :ref:`animation<class_AnimatedSprite2D_property_animation>` is currently playing. Setting this property to ``false`` is the equivalent of calling :ref:`stop<class_AnimatedSprite2D_method_stop>`.
 
 
 ----
 ----
 
 
@@ -218,7 +222,7 @@ If ``true``, the :ref:`animation<class_AnimatedSprite2D_property_animation>` is
 | *Getter*  | get_speed_scale()      |
 | *Getter*  | get_speed_scale()      |
 +-----------+------------------------+
 +-----------+------------------------+
 
 
-The animation speed is multiplied by this value.
+The animation speed is multiplied by this value. If set to a negative value, the animation is played in reverse. If set to ``0``, the animation is paused, preserving the current frame's elapsed time.
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
@@ -227,7 +231,7 @@ Method Descriptions
 
 
 - void **play** **(** :ref:`StringName<class_StringName>` anim=&"", :ref:`bool<class_bool>` backwards=false **)**
 - void **play** **(** :ref:`StringName<class_StringName>` anim=&"", :ref:`bool<class_bool>` backwards=false **)**
 
 
-Plays the animation named ``anim``. If no ``anim`` is provided, the current animation is played. If ``backwards`` is ``true``, the animation will be played in reverse.
+Plays the animation named ``anim``. If no ``anim`` is provided, the current animation is played. If ``backwards`` is ``true``, the animation is played in reverse.
 
 
 ----
 ----
 
 
@@ -235,7 +239,9 @@ Plays the animation named ``anim``. If no ``anim`` is provided, the current anim
 
 
 - void **stop** **(** **)**
 - void **stop** **(** **)**
 
 
-Stops the current animation (does not reset the frame counter).
+Stops the current :ref:`animation<class_AnimatedSprite2D_property_animation>` at the current :ref:`frame<class_AnimatedSprite2D_property_frame>`.
+
+\ **Note:** This method resets the current frame's elapsed time. If this behavior is undesired, consider setting :ref:`speed_scale<class_AnimatedSprite2D_property_speed_scale>` to ``0``, instead.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 11 - 5
classes/class_animatedsprite3d.rst

@@ -17,7 +17,11 @@ AnimatedSprite3D
 Description
 Description
 -----------
 -----------
 
 
-Animations are created using a :ref:`SpriteFrames<class_SpriteFrames>` resource, which can be configured in the editor via the SpriteFrames panel.
+``AnimatedSprite3D`` is similar to the :ref:`Sprite3D<class_Sprite3D>` node, except it carries multiple textures as animation :ref:`frames<class_AnimatedSprite3D_property_frames>`. Animations are created using a :ref:`SpriteFrames<class_SpriteFrames>` resource, which allows you to import image files (or a folder containing said files) to provide the animation frames for the sprite. The :ref:`SpriteFrames<class_SpriteFrames>` resource can be configured in the editor via the SpriteFrames bottom panel.
+
+After setting up :ref:`frames<class_AnimatedSprite3D_property_frames>`, :ref:`play<class_AnimatedSprite3D_method_play>` may be called. It's also possible to select an :ref:`animation<class_AnimatedSprite3D_property_animation>` and toggle :ref:`playing<class_AnimatedSprite3D_property_playing>`, even within the editor.
+
+To pause the current animation, call :ref:`stop<class_AnimatedSprite3D_method_stop>` or set :ref:`playing<class_AnimatedSprite3D_property_playing>` to ``false``. Alternatively, setting :ref:`speed_scale<class_AnimatedSprite3D_property_speed_scale>` to ``0`` also preserves the current frame's elapsed time.
 
 
 Tutorials
 Tutorials
 ---------
 ---------
@@ -126,7 +130,7 @@ The :ref:`SpriteFrames<class_SpriteFrames>` resource containing the animation(s)
 | *Getter*  | is_playing()       |
 | *Getter*  | is_playing()       |
 +-----------+--------------------+
 +-----------+--------------------+
 
 
-If ``true``, the :ref:`animation<class_AnimatedSprite3D_property_animation>` is currently playing.
+If ``true``, the :ref:`animation<class_AnimatedSprite3D_property_animation>` is currently playing. Setting this property to ``false`` is the equivalent of calling :ref:`stop<class_AnimatedSprite3D_method_stop>`.
 
 
 ----
 ----
 
 
@@ -142,7 +146,7 @@ If ``true``, the :ref:`animation<class_AnimatedSprite3D_property_animation>` is
 | *Getter*  | get_speed_scale()      |
 | *Getter*  | get_speed_scale()      |
 +-----------+------------------------+
 +-----------+------------------------+
 
 
-The animation speed is multiplied by this value.
+The animation speed is multiplied by this value. If set to a negative value, the animation is played in reverse. If set to ``0``, the animation is paused, preserving the current frame's elapsed time.
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
@@ -151,7 +155,7 @@ Method Descriptions
 
 
 - void **play** **(** :ref:`StringName<class_StringName>` anim=&"", :ref:`bool<class_bool>` backwards=false **)**
 - void **play** **(** :ref:`StringName<class_StringName>` anim=&"", :ref:`bool<class_bool>` backwards=false **)**
 
 
-Plays the animation named ``anim``. If no ``anim`` is provided, the current animation is played. If ``backwards`` is ``true``, the animation will be played in reverse.
+Plays the animation named ``anim``. If no ``anim`` is provided, the current animation is played. If ``backwards`` is ``true``, the animation is played in reverse.
 
 
 ----
 ----
 
 
@@ -159,7 +163,9 @@ Plays the animation named ``anim``. If no ``anim`` is provided, the current anim
 
 
 - void **stop** **(** **)**
 - void **stop** **(** **)**
 
 
-Stops the current animation (does not reset the frame counter).
+Stops the current :ref:`animation<class_AnimatedSprite3D_property_animation>` at the current :ref:`frame<class_AnimatedSprite3D_property_frame>`.
+
+\ **Note:** This method resets the current frame's elapsed time. If this behavior is undesired, consider setting :ref:`speed_scale<class_AnimatedSprite3D_property_speed_scale>` to ``0``, instead.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 1 - 1
classes/class_animationlibrary.rst

@@ -91,7 +91,7 @@ Method Descriptions
 
 
 - :ref:`Error<enum_@GlobalScope_Error>` **add_animation** **(** :ref:`StringName<class_StringName>` name, :ref:`Animation<class_Animation>` animation **)**
 - :ref:`Error<enum_@GlobalScope_Error>` **add_animation** **(** :ref:`StringName<class_StringName>` name, :ref:`Animation<class_Animation>` animation **)**
 
 
-Adds the ``animation`` to the library, accesible by the key ``name``.
+Adds the ``animation`` to the library, accessible by the key ``name``.
 
 
 ----
 ----
 
 

+ 9 - 0
classes/class_animationnodeblendtree.rst

@@ -56,6 +56,15 @@ Methods
 | void                                      | :ref:`set_node_position<class_AnimationNodeBlendTree_method_set_node_position>` **(** :ref:`StringName<class_StringName>` name, :ref:`Vector2<class_Vector2>` position **)**                                             |
 | void                                      | :ref:`set_node_position<class_AnimationNodeBlendTree_method_set_node_position>` **(** :ref:`StringName<class_StringName>` name, :ref:`Vector2<class_Vector2>` position **)**                                             |
 +-------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
+Signals
+-------
+
+.. _class_AnimationNodeBlendTree_signal_node_changed:
+
+- **node_changed** **(** :ref:`StringName<class_StringName>` node_name **)**
+
+Emitted when the input port information is changed.
+
 Constants
 Constants
 ---------
 ---------
 
 

+ 17 - 35
classes/class_animationnodestatemachinetransition.rst

@@ -22,25 +22,23 @@ Tutorials
 Properties
 Properties
 ----------
 ----------
 
 
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`StringName<class_StringName>`                                    | :ref:`advance_condition<class_AnimationNodeStateMachineTransition_property_advance_condition>`                       | ``&""``          |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`String<class_String>`                                            | :ref:`advance_expression<class_AnimationNodeStateMachineTransition_property_advance_expression>`                     | ``""``           |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`NodePath<class_NodePath>`                                        | :ref:`advance_expression_base_node<class_AnimationNodeStateMachineTransition_property_advance_expression_base_node>` | ``NodePath("")`` |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`bool<class_bool>`                                                | :ref:`auto_advance<class_AnimationNodeStateMachineTransition_property_auto_advance>`                                 | ``false``        |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`bool<class_bool>`                                                | :ref:`disabled<class_AnimationNodeStateMachineTransition_property_disabled>`                                         | ``false``        |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`int<class_int>`                                                  | :ref:`priority<class_AnimationNodeStateMachineTransition_property_priority>`                                         | ``1``            |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`SwitchMode<enum_AnimationNodeStateMachineTransition_SwitchMode>` | :ref:`switch_mode<class_AnimationNodeStateMachineTransition_property_switch_mode>`                                   | ``0``            |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`Curve<class_Curve>`                                              | :ref:`xfade_curve<class_AnimationNodeStateMachineTransition_property_xfade_curve>`                                   |                  |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
-| :ref:`float<class_float>`                                              | :ref:`xfade_time<class_AnimationNodeStateMachineTransition_property_xfade_time>`                                     | ``0.0``          |
-+------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+------------------+
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`StringName<class_StringName>`                                    | :ref:`advance_condition<class_AnimationNodeStateMachineTransition_property_advance_condition>`   | ``&""``   |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`String<class_String>`                                            | :ref:`advance_expression<class_AnimationNodeStateMachineTransition_property_advance_expression>` | ``""``    |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`bool<class_bool>`                                                | :ref:`auto_advance<class_AnimationNodeStateMachineTransition_property_auto_advance>`             | ``false`` |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`bool<class_bool>`                                                | :ref:`disabled<class_AnimationNodeStateMachineTransition_property_disabled>`                     | ``false`` |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`int<class_int>`                                                  | :ref:`priority<class_AnimationNodeStateMachineTransition_property_priority>`                     | ``1``     |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`SwitchMode<enum_AnimationNodeStateMachineTransition_SwitchMode>` | :ref:`switch_mode<class_AnimationNodeStateMachineTransition_property_switch_mode>`               | ``0``     |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`Curve<class_Curve>`                                              | :ref:`xfade_curve<class_AnimationNodeStateMachineTransition_property_xfade_curve>`               |           |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
+| :ref:`float<class_float>`                                              | :ref:`xfade_time<class_AnimationNodeStateMachineTransition_property_xfade_time>`                 | ``0.0``   |
++------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+-----------+
 
 
 Signals
 Signals
 -------
 -------
@@ -118,22 +116,6 @@ Use an expression as a condition for state machine transitions. It is possible t
 
 
 ----
 ----
 
 
-.. _class_AnimationNodeStateMachineTransition_property_advance_expression_base_node:
-
-- :ref:`NodePath<class_NodePath>` **advance_expression_base_node**
-
-+-----------+-----------------------------------------+
-| *Default* | ``NodePath("")``                        |
-+-----------+-----------------------------------------+
-| *Setter*  | set_advance_expression_base_node(value) |
-+-----------+-----------------------------------------+
-| *Getter*  | get_advance_expression_base_node()      |
-+-----------+-----------------------------------------+
-
-The path to the :ref:`Node<class_Node>` used to evaluate an :ref:`Expression<class_Expression>` if one is not explicitly specified internally.
-
-----
-
 .. _class_AnimationNodeStateMachineTransition_property_auto_advance:
 .. _class_AnimationNodeStateMachineTransition_property_auto_advance:
 
 
 - :ref:`bool<class_bool>` **auto_advance**
 - :ref:`bool<class_bool>` **auto_advance**

+ 10 - 2
classes/class_animationplayer.rst

@@ -19,7 +19,7 @@ Description
 
 
 An animation player is used for general-purpose playback of :ref:`Animation<class_Animation>` resources. It contains a dictionary of :ref:`AnimationLibrary<class_AnimationLibrary>` resources and custom blend times between animation transitions.
 An animation player is used for general-purpose playback of :ref:`Animation<class_Animation>` resources. It contains a dictionary of :ref:`AnimationLibrary<class_AnimationLibrary>` resources and custom blend times between animation transitions.
 
 
-Some methods and properties use a single key to refence an animation directly. These keys are formatted as the key for the library, followed by a forward slash, then the key for the animation whithin the library, for example ``"movement/run"``. If the library's key is an empty string (known as the default library), the forward slash is omitted, being the same key used by the library.
+Some methods and properties use a single key to reference an animation directly. These keys are formatted as the key for the library, followed by a forward slash, then the key for the animation within the library, for example ``"movement/run"``. If the library's key is an empty string (known as the default library), the forward slash is omitted, being the same key used by the library.
 
 
 \ ``AnimationPlayer`` is more suited than :ref:`Tween<class_Tween>` for animations where you know the final values in advance. For example, fading a screen in and out is more easily done with an ``AnimationPlayer`` node thanks to the animation tools provided by the editor. That particular example can also be implemented with a :ref:`Tween<class_Tween>`, but it requires doing everything by code.
 \ ``AnimationPlayer`` is more suited than :ref:`Tween<class_Tween>` for animations where you know the final values in advance. For example, fading a screen in and out is more easily done with an ``AnimationPlayer`` node thanks to the animation tools provided by the editor. That particular example can also be implemented with a :ref:`Tween<class_Tween>`, but it requires doing everything by code.
 
 
@@ -145,6 +145,14 @@ Notifies when an animation finished playing.
 
 
 ----
 ----
 
 
+.. _class_AnimationPlayer_signal_animation_list_changed:
+
+- **animation_list_changed** **(** **)**
+
+Notifies when an animation list is changed.
+
+----
+
 .. _class_AnimationPlayer_signal_animation_started:
 .. _class_AnimationPlayer_signal_animation_started:
 
 
 - **animation_started** **(** :ref:`StringName<class_StringName>` anim_name **)**
 - **animation_started** **(** :ref:`StringName<class_StringName>` anim_name **)**
@@ -578,7 +586,7 @@ Queues an animation for playback once the current one is done.
 
 
 - void **remove_animation_library** **(** :ref:`StringName<class_StringName>` name **)**
 - void **remove_animation_library** **(** :ref:`StringName<class_StringName>` name **)**
 
 
-Removes the :ref:`AnimationLibrary<class_AnimationLibrary>` assosiated with the key ``name``.
+Removes the :ref:`AnimationLibrary<class_AnimationLibrary>` associated with the key ``name``.
 
 
 ----
 ----
 
 

+ 9 - 0
classes/class_animationtree.rst

@@ -56,6 +56,15 @@ Methods
 | void                                  | :ref:`rename_parameter<class_AnimationTree_method_rename_parameter>` **(** :ref:`String<class_String>` old_name, :ref:`String<class_String>` new_name **)** |
 | void                                  | :ref:`rename_parameter<class_AnimationTree_method_rename_parameter>` **(** :ref:`String<class_String>` old_name, :ref:`String<class_String>` new_name **)** |
 +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
+Signals
+-------
+
+.. _class_AnimationTree_signal_animation_player_changed:
+
+- **animation_player_changed** **(** **)**
+
+Emitted when the :ref:`anim_player<class_AnimationTree_property_anim_player>` is changed.
+
 Enumerations
 Enumerations
 ------------
 ------------
 
 

+ 175 - 101
classes/class_array.rst

@@ -71,110 +71,128 @@ Arrays can be concatenated using the ``+`` operator:
 Constructors
 Constructors
 ------------
 ------------
 
 
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** **)**                                                          |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`Array<class_Array>` from **)**                           |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedByteArray<class_PackedByteArray>` from **)**       |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedColorArray<class_PackedColorArray>` from **)**     |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedFloat32Array<class_PackedFloat32Array>` from **)** |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedFloat64Array<class_PackedFloat64Array>` from **)** |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedInt32Array<class_PackedInt32Array>` from **)**     |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedInt64Array<class_PackedInt64Array>` from **)**     |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedStringArray<class_PackedStringArray>` from **)**   |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` from **)** |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedVector3Array<class_PackedVector3Array>` from **)** |
-+---------------------------+------------------------------------------------------------------------------------------------------------------+
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** **)**                                                                                                                                                  |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`Array<class_Array>` base, :ref:`int<class_int>` type, :ref:`StringName<class_StringName>` class_name, :ref:`Variant<class_Variant>` script **)** |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`Array<class_Array>` from **)**                                                                                                                   |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedByteArray<class_PackedByteArray>` from **)**                                                                                               |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedColorArray<class_PackedColorArray>` from **)**                                                                                             |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedFloat32Array<class_PackedFloat32Array>` from **)**                                                                                         |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedFloat64Array<class_PackedFloat64Array>` from **)**                                                                                         |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedInt32Array<class_PackedInt32Array>` from **)**                                                                                             |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedInt64Array<class_PackedInt64Array>` from **)**                                                                                             |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedStringArray<class_PackedStringArray>` from **)**                                                                                           |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` from **)**                                                                                         |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>` | :ref:`Array<class_Array_constructor_Array>` **(** :ref:`PackedVector3Array<class_PackedVector3Array>` from **)**                                                                                         |
++---------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Methods
 Methods
 -------
 -------
 
 
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`       | :ref:`all<class_Array_method_all>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                                  |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`       | :ref:`any<class_Array_method_any>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                                  |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`append<class_Array_method_append>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                       |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`append_array<class_Array_method_append_array>` **(** :ref:`Array<class_Array>` array **)**                                                                                               |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`back<class_Array_method_back>` **(** **)** |const|                                                                                                                                       |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`bsearch<class_Array_method_bsearch>` **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` before=true **)**                                                                |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`bsearch_custom<class_Array_method_bsearch_custom>` **(** :ref:`Variant<class_Variant>` value, :ref:`Callable<class_Callable>` func, :ref:`bool<class_bool>` before=true **)**            |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`clear<class_Array_method_clear>` **(** **)**                                                                                                                                             |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`count<class_Array_method_count>` **(** :ref:`Variant<class_Variant>` value **)** |const|                                                                                                 |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>`     | :ref:`duplicate<class_Array_method_duplicate>` **(** :ref:`bool<class_bool>` deep=false **)** |const|                                                                                          |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`erase<class_Array_method_erase>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                         |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`fill<class_Array_method_fill>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                           |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>`     | :ref:`filter<class_Array_method_filter>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                            |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`find<class_Array_method_find>` **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=0 **)** |const|                                                                      |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`find_last<class_Array_method_find_last>` **(** :ref:`Variant<class_Variant>` value **)** |const|                                                                                         |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`front<class_Array_method_front>` **(** **)** |const|                                                                                                                                     |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`       | :ref:`has<class_Array_method_has>` **(** :ref:`Variant<class_Variant>` value **)** |const|                                                                                                     |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`hash<class_Array_method_hash>` **(** **)** |const|                                                                                                                                       |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`insert<class_Array_method_insert>` **(** :ref:`int<class_int>` position, :ref:`Variant<class_Variant>` value **)**                                                                       |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`       | :ref:`is_empty<class_Array_method_is_empty>` **(** **)** |const|                                                                                                                               |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>`     | :ref:`map<class_Array_method_map>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                                  |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`max<class_Array_method_max>` **(** **)** |const|                                                                                                                                         |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`min<class_Array_method_min>` **(** **)** |const|                                                                                                                                         |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`pop_at<class_Array_method_pop_at>` **(** :ref:`int<class_int>` position **)**                                                                                                            |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`pop_back<class_Array_method_pop_back>` **(** **)**                                                                                                                                       |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`pop_front<class_Array_method_pop_front>` **(** **)**                                                                                                                                     |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`push_back<class_Array_method_push_back>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                 |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`push_front<class_Array_method_push_front>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                               |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>` | :ref:`reduce<class_Array_method_reduce>` **(** :ref:`Callable<class_Callable>` method, :ref:`Variant<class_Variant>` accum=null **)** |const|                                                  |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`remove_at<class_Array_method_remove_at>` **(** :ref:`int<class_int>` position **)**                                                                                                      |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`resize<class_Array_method_resize>` **(** :ref:`int<class_int>` size **)**                                                                                                                |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`reverse<class_Array_method_reverse>` **(** **)**                                                                                                                                         |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`rfind<class_Array_method_rfind>` **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=-1 **)** |const|                                                                   |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`shuffle<class_Array_method_shuffle>` **(** **)**                                                                                                                                         |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`         | :ref:`size<class_Array_method_size>` **(** **)** |const|                                                                                                                                       |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Array<class_Array>`     | :ref:`slice<class_Array_method_slice>` **(** :ref:`int<class_int>` begin, :ref:`int<class_int>` end=2147483647, :ref:`int<class_int>` step=1, :ref:`bool<class_bool>` deep=false **)** |const| |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`sort<class_Array_method_sort>` **(** **)**                                                                                                                                               |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                          | :ref:`sort_custom<class_Array_method_sort_custom>` **(** :ref:`Callable<class_Callable>` func **)**                                                                                            |
-+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`all<class_Array_method_all>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                                  |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`any<class_Array_method_any>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                                  |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`append<class_Array_method_append>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`append_array<class_Array_method_append_array>` **(** :ref:`Array<class_Array>` array **)**                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`back<class_Array_method_back>` **(** **)** |const|                                                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`bsearch<class_Array_method_bsearch>` **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` before=true **)**                                                                |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`bsearch_custom<class_Array_method_bsearch_custom>` **(** :ref:`Variant<class_Variant>` value, :ref:`Callable<class_Callable>` func, :ref:`bool<class_bool>` before=true **)**            |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`clear<class_Array_method_clear>` **(** **)**                                                                                                                                             |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`count<class_Array_method_count>` **(** :ref:`Variant<class_Variant>` value **)** |const|                                                                                                 |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>`           | :ref:`duplicate<class_Array_method_duplicate>` **(** :ref:`bool<class_bool>` deep=false **)** |const|                                                                                          |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`erase<class_Array_method_erase>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                         |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`fill<class_Array_method_fill>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                           |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>`           | :ref:`filter<class_Array_method_filter>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                            |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`find<class_Array_method_find>` **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=0 **)** |const|                                                                      |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`find_last<class_Array_method_find_last>` **(** :ref:`Variant<class_Variant>` value **)** |const|                                                                                         |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`front<class_Array_method_front>` **(** **)** |const|                                                                                                                                     |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`get_typed_builtin<class_Array_method_get_typed_builtin>` **(** **)** |const|                                                                                                             |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`StringName<class_StringName>` | :ref:`get_typed_class_name<class_Array_method_get_typed_class_name>` **(** **)** |const|                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`get_typed_script<class_Array_method_get_typed_script>` **(** **)** |const|                                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`has<class_Array_method_has>` **(** :ref:`Variant<class_Variant>` value **)** |const|                                                                                                     |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`hash<class_Array_method_hash>` **(** **)** |const|                                                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`insert<class_Array_method_insert>` **(** :ref:`int<class_int>` position, :ref:`Variant<class_Variant>` value **)**                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`is_empty<class_Array_method_is_empty>` **(** **)** |const|                                                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`is_read_only<class_Array_method_is_read_only>` **(** **)** |const|                                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`is_typed<class_Array_method_is_typed>` **(** **)** |const|                                                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>`           | :ref:`map<class_Array_method_map>` **(** :ref:`Callable<class_Callable>` method **)** |const|                                                                                                  |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`max<class_Array_method_max>` **(** **)** |const|                                                                                                                                         |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`min<class_Array_method_min>` **(** **)** |const|                                                                                                                                         |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`pop_at<class_Array_method_pop_at>` **(** :ref:`int<class_int>` position **)**                                                                                                            |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`pop_back<class_Array_method_pop_back>` **(** **)**                                                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`pop_front<class_Array_method_pop_front>` **(** **)**                                                                                                                                     |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`push_back<class_Array_method_push_back>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                                 |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`push_front<class_Array_method_push_front>` **(** :ref:`Variant<class_Variant>` value **)**                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`reduce<class_Array_method_reduce>` **(** :ref:`Callable<class_Callable>` method, :ref:`Variant<class_Variant>` accum=null **)** |const|                                                  |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`remove_at<class_Array_method_remove_at>` **(** :ref:`int<class_int>` position **)**                                                                                                      |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`resize<class_Array_method_resize>` **(** :ref:`int<class_int>` size **)**                                                                                                                |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`reverse<class_Array_method_reverse>` **(** **)**                                                                                                                                         |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`rfind<class_Array_method_rfind>` **(** :ref:`Variant<class_Variant>` what, :ref:`int<class_int>` from=-1 **)** |const|                                                                   |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`set_read_only<class_Array_method_set_read_only>` **(** :ref:`bool<class_bool>` enable **)**                                                                                              |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`set_typed<class_Array_method_set_typed>` **(** :ref:`int<class_int>` type, :ref:`StringName<class_StringName>` class_name, :ref:`Variant<class_Variant>` script **)**                    |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`shuffle<class_Array_method_shuffle>` **(** **)**                                                                                                                                         |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`               | :ref:`size<class_Array_method_size>` **(** **)** |const|                                                                                                                                       |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Array<class_Array>`           | :ref:`slice<class_Array_method_slice>` **(** :ref:`int<class_int>` begin, :ref:`int<class_int>` end=2147483647, :ref:`int<class_int>` step=1, :ref:`bool<class_bool>` deep=false **)** |const| |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`sort<class_Array_method_sort>` **(** **)**                                                                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`sort_custom<class_Array_method_sort_custom>` **(** :ref:`Callable<class_Callable>` func **)**                                                                                            |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`             | :ref:`typed_assign<class_Array_method_typed_assign>` **(** :ref:`Array<class_Array>` array **)**                                                                                               |
++-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Operators
 Operators
 ---------
 ---------
@@ -208,6 +226,10 @@ Constructs an empty ``Array``.
 
 
 ----
 ----
 
 
+- :ref:`Array<class_Array>` **Array** **(** :ref:`Array<class_Array>` base, :ref:`int<class_int>` type, :ref:`StringName<class_StringName>` class_name, :ref:`Variant<class_Variant>` script **)**
+
+----
+
 - :ref:`Array<class_Array>` **Array** **(** :ref:`Array<class_Array>` from **)**
 - :ref:`Array<class_Array>` **Array** **(** :ref:`Array<class_Array>` from **)**
 
 
 Constructs an ``Array`` as a copy of the given ``Array``.
 Constructs an ``Array`` as a copy of the given ``Array``.
@@ -490,6 +512,24 @@ Returns the first element of the array. Prints an error and returns ``null`` if
 
 
 ----
 ----
 
 
+.. _class_Array_method_get_typed_builtin:
+
+- :ref:`int<class_int>` **get_typed_builtin** **(** **)** |const|
+
+----
+
+.. _class_Array_method_get_typed_class_name:
+
+- :ref:`StringName<class_StringName>` **get_typed_class_name** **(** **)** |const|
+
+----
+
+.. _class_Array_method_get_typed_script:
+
+- :ref:`Variant<class_Variant>` **get_typed_script** **(** **)** |const|
+
+----
+
 .. _class_Array_method_has:
 .. _class_Array_method_has:
 
 
 - :ref:`bool<class_bool>` **has** **(** :ref:`Variant<class_Variant>` value **)** |const|
 - :ref:`bool<class_bool>` **has** **(** :ref:`Variant<class_Variant>` value **)** |const|
@@ -573,6 +613,18 @@ Returns ``true`` if the array is empty.
 
 
 ----
 ----
 
 
+.. _class_Array_method_is_read_only:
+
+- :ref:`bool<class_bool>` **is_read_only** **(** **)** |const|
+
+----
+
+.. _class_Array_method_is_typed:
+
+- :ref:`bool<class_bool>` **is_typed** **(** **)** |const|
+
+----
+
 .. _class_Array_method_map:
 .. _class_Array_method_map:
 
 
 - :ref:`Array<class_Array>` **map** **(** :ref:`Callable<class_Callable>` method **)** |const|
 - :ref:`Array<class_Array>` **map** **(** :ref:`Callable<class_Callable>` method **)** |const|
@@ -713,6 +765,18 @@ Searches the array in reverse order. Optionally, a start search index can be pas
 
 
 ----
 ----
 
 
+.. _class_Array_method_set_read_only:
+
+- void **set_read_only** **(** :ref:`bool<class_bool>` enable **)**
+
+----
+
+.. _class_Array_method_set_typed:
+
+- void **set_typed** **(** :ref:`int<class_int>` type, :ref:`StringName<class_StringName>` class_name, :ref:`Variant<class_Variant>` script **)**
+
+----
+
 .. _class_Array_method_shuffle:
 .. _class_Array_method_shuffle:
 
 
 - void **shuffle** **(** **)**
 - void **shuffle** **(** **)**
@@ -751,6 +815,8 @@ If ``deep`` is true, each element will be copied by value rather than by referen
 
 
 Sorts the array.
 Sorts the array.
 
 
+\ **Note:** The sorting algorithm used is not `stable <https://en.wikipedia.org/wiki/Sorting_algorithm#Stability>`__. This means that values considered equal may have their order changed when using :ref:`sort<class_Array_method_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:
 \ **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:
 
 
 
 
@@ -784,7 +850,9 @@ To perform natural order sorting, you can use :ref:`sort_custom<class_Array_meth
 
 
 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.
 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:** You cannot randomize the return value as the heapsort algorithm expects a deterministic result. Doing so will result in unexpected behavior.
+\ **Note:** The sorting algorithm used is not `stable <https://en.wikipedia.org/wiki/Sorting_algorithm#Stability>`__. This means that values considered equal may have their order changed when using :ref:`sort_custom<class_Array_method_sort_custom>`.
+
+\ **Note:** You cannot randomize the return value as the heapsort algorithm expects a deterministic result. Randomizing the return value will result in unexpected behavior.
 
 
 
 
 .. tabs::
 .. tabs::
@@ -811,6 +879,12 @@ Sorts the array using a custom method. The custom method receives two arguments
 
 
 
 
 
 
+----
+
+.. _class_Array_method_typed_assign:
+
+- :ref:`bool<class_bool>` **typed_assign** **(** :ref:`Array<class_Array>` array **)**
+
 Operator Descriptions
 Operator Descriptions
 ---------------------
 ---------------------
 
 

+ 17 - 3
classes/class_astargrid2d.rst

@@ -21,7 +21,10 @@ Compared to :ref:`AStar2D<class_AStar2D>` you don't need to manually create poin
 
 
 In contrast to :ref:`AStar2D<class_AStar2D>`, you only need set the :ref:`size<class_AStarGrid2D_property_size>` of the grid, optionally set the :ref:`cell_size<class_AStarGrid2D_property_cell_size>` and then call the :ref:`update<class_AStarGrid2D_method_update>` method:
 In contrast to :ref:`AStar2D<class_AStar2D>`, you only need set the :ref:`size<class_AStarGrid2D_property_size>` of the grid, optionally set the :ref:`cell_size<class_AStarGrid2D_property_cell_size>` and then call the :ref:`update<class_AStarGrid2D_method_update>` method:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     var astar_grid = AStarGrid2D.new()
     var astar_grid = AStarGrid2D.new()
     astar_grid.size = Vector2i(32, 32)
     astar_grid.size = Vector2i(32, 32)
@@ -30,6 +33,17 @@ In contrast to :ref:`AStar2D<class_AStar2D>`, you only need set the :ref:`size<c
     print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, 0), (1, 1), (2, 2), (3, 3), (3, 4)
     print(astar_grid.get_id_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, 0), (1, 1), (2, 2), (3, 3), (3, 4)
     print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)
     print(astar_grid.get_point_path(Vector2i(0, 0), Vector2i(3, 4))) # prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)
 
 
+ .. code-tab:: csharp
+
+    AStarGrid2D astarGrid = new AStarGrid2D();
+    astarGrid.Size = new Vector2i(32, 32);
+    astarGrid.CellSize = new Vector2i(16, 16);
+    astarGrid.Update();
+    GD.Print(astarGrid.GetIdPath(Vector2i.Zero, new Vector2i(3, 4))); // prints (0, 0), (1, 1), (2, 2), (3, 3), (3, 4)
+    GD.Print(astarGrid.GetPointPath(Vector2i.Zero, new Vector2i(3, 4))); // prints (0, 0), (16, 16), (32, 32), (48, 48), (48, 64)
+
+
+
 Properties
 Properties
 ----------
 ----------
 
 
@@ -57,7 +71,7 @@ Methods
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                | :ref:`clear<class_AStarGrid2D_method_clear>` **(** **)**                                                                                                                    |
 | void                                                | :ref:`clear<class_AStarGrid2D_method_clear>` **(** **)**                                                                                                                    |
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`get_id_path<class_AStarGrid2D_method_get_id_path>` **(** :ref:`Vector2i<class_Vector2i>` from_id, :ref:`Vector2i<class_Vector2i>` to_id **)**                         |
+| :ref:`Vector2i[]<class_Vector2i>`                   | :ref:`get_id_path<class_AStarGrid2D_method_get_id_path>` **(** :ref:`Vector2i<class_Vector2i>` from_id, :ref:`Vector2i<class_Vector2i>` to_id **)**                         |
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`get_point_path<class_AStarGrid2D_method_get_point_path>` **(** :ref:`Vector2i<class_Vector2i>` from_id, :ref:`Vector2i<class_Vector2i>` to_id **)**                   |
 | :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`get_point_path<class_AStarGrid2D_method_get_point_path>` **(** :ref:`Vector2i<class_Vector2i>` from_id, :ref:`Vector2i<class_Vector2i>` to_id **)**                   |
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -282,7 +296,7 @@ Clears the grid and sets the :ref:`size<class_AStarGrid2D_property_size>` to :re
 
 
 .. _class_AStarGrid2D_method_get_id_path:
 .. _class_AStarGrid2D_method_get_id_path:
 
 
-- :ref:`PackedVector2Array<class_PackedVector2Array>` **get_id_path** **(** :ref:`Vector2i<class_Vector2i>` from_id, :ref:`Vector2i<class_Vector2i>` to_id **)**
+- :ref:`Vector2i[]<class_Vector2i>` **get_id_path** **(** :ref:`Vector2i<class_Vector2i>` from_id, :ref:`Vector2i<class_Vector2i>` to_id **)**
 
 
 Returns an array with the IDs of the points that form the path found by AStar2D between the given points. The array is ordered from the starting point to the ending point of the path.
 Returns an array with the IDs of the points that form the path found by AStar2D between the given points. The array is ordered from the starting point to the ending point of the path.
 
 

+ 9 - 7
classes/class_atlastexture.rst

@@ -12,14 +12,16 @@ AtlasTexture
 
 
 **Inherits:** :ref:`Texture2D<class_Texture2D>` **<** :ref:`Texture<class_Texture>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 **Inherits:** :ref:`Texture2D<class_Texture2D>` **<** :ref:`Texture<class_Texture>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 
 
-Crops out one part of a texture, such as a texture from a texture atlas.
+A texture that crops out part of another Texture2D.
 
 
 Description
 Description
 -----------
 -----------
 
 
-:ref:`Texture2D<class_Texture2D>` resource that crops out one part of the :ref:`atlas<class_AtlasTexture_property_atlas>` texture, defined by :ref:`region<class_AtlasTexture_property_region>`. The main use case is cropping out textures from a texture atlas, which is a big texture file that packs multiple smaller textures. Consists of a :ref:`Texture2D<class_Texture2D>` for the :ref:`atlas<class_AtlasTexture_property_atlas>`, a :ref:`region<class_AtlasTexture_property_region>` that defines the area of :ref:`atlas<class_AtlasTexture_property_atlas>` to use, and a :ref:`margin<class_AtlasTexture_property_margin>` that defines the border width.
+:ref:`Texture2D<class_Texture2D>` resource that draws only part of its :ref:`atlas<class_AtlasTexture_property_atlas>` texture, as defined by the :ref:`region<class_AtlasTexture_property_region>`. An additional :ref:`margin<class_AtlasTexture_property_margin>` can also be set, which is useful for small adjustments.
 
 
-\ ``AtlasTexture`` cannot be used in an :ref:`AnimatedTexture<class_AnimatedTexture>`, cannot be tiled in nodes such as :ref:`TextureRect<class_TextureRect>`, and does not work properly if used inside of other ``AtlasTexture`` resources. Multiple ``AtlasTexture`` resources can be used to crop multiple textures from the atlas. Using a texture atlas helps to optimize video memory costs and render calls compared to using multiple small files.
+Multiple ``AtlasTexture`` resources can be cropped from the same :ref:`atlas<class_AtlasTexture_property_atlas>`. Packing many smaller textures into a singular large texture helps to optimize video memory costs and render calls.
+
+\ **Note:** ``AtlasTexture`` cannot be used in an :ref:`AnimatedTexture<class_AnimatedTexture>`, and may not tile properly in nodes such as :ref:`TextureRect<class_TextureRect>`, when inside other ``AtlasTexture`` resources.
 
 
 Properties
 Properties
 ----------
 ----------
@@ -47,7 +49,7 @@ Property Descriptions
 | *Getter* | get_atlas()      |
 | *Getter* | get_atlas()      |
 +----------+------------------+
 +----------+------------------+
 
 
-The texture that contains the atlas. Can be any :ref:`Texture2D<class_Texture2D>` subtype.
+The texture that contains the atlas. Can be any type inheriting from :ref:`Texture2D<class_Texture2D>`, including another ``AtlasTexture``.
 
 
 ----
 ----
 
 
@@ -63,7 +65,7 @@ The texture that contains the atlas. Can be any :ref:`Texture2D<class_Texture2D>
 | *Getter*  | has_filter_clip()      |
 | *Getter*  | has_filter_clip()      |
 +-----------+------------------------+
 +-----------+------------------------+
 
 
-If ``true``, clips the area outside of the region to avoid bleeding of the surrounding texture pixels.
+If ``true``, the area outside of the :ref:`region<class_AtlasTexture_property_region>` is clipped to avoid bleeding of the surrounding texture pixels.
 
 
 ----
 ----
 
 
@@ -79,7 +81,7 @@ If ``true``, clips the area outside of the region to avoid bleeding of the surro
 | *Getter*  | get_margin()          |
 | *Getter*  | get_margin()          |
 +-----------+-----------------------+
 +-----------+-----------------------+
 
 
-The margin around the region. The :ref:`Rect2<class_Rect2>`'s :ref:`Rect2.size<class_Rect2_property_size>` parameter ("w" and "h" in the editor) resizes the texture so it fits within the margin.
+The margin around the :ref:`region<class_AtlasTexture_property_region>`. Useful for small adjustments. If the :ref:`Rect2.size<class_Rect2_property_size>` of this property ("w" and "h" in the editor) is set, the drawn texture is resized to fit within the margin.
 
 
 ----
 ----
 
 
@@ -95,7 +97,7 @@ The margin around the region. The :ref:`Rect2<class_Rect2>`'s :ref:`Rect2.size<c
 | *Getter*  | get_region()          |
 | *Getter*  | get_region()          |
 +-----------+-----------------------+
 +-----------+-----------------------+
 
 
-The AtlasTexture's used region.
+The region used to draw the :ref:`atlas<class_AtlasTexture_property_atlas>`.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 19 - 19
classes/class_audiostreamplayer3d.rst

@@ -23,7 +23,7 @@ By default, audio is heard from the camera position. This can be changed by addi
 
 
 See also :ref:`AudioStreamPlayer<class_AudioStreamPlayer>` to play a sound non-positionally.
 See also :ref:`AudioStreamPlayer<class_AudioStreamPlayer>` to play a sound non-positionally.
 
 
-\ **Note:** Hiding an ``AudioStreamPlayer3D`` node does not disable its audio output. To temporarily disable an ``AudioStreamPlayer3D``'s audio output, set :ref:`unit_db<class_AudioStreamPlayer3D_property_unit_db>` to a very low value like ``-100`` (which isn't audible to human hearing).
+\ **Note:** Hiding an ``AudioStreamPlayer3D`` node does not disable its audio output. To temporarily disable an ``AudioStreamPlayer3D``'s audio output, set :ref:`volume_db<class_AudioStreamPlayer3D_property_volume_db>` to a very low value like ``-100`` (which isn't audible to human hearing).
 
 
 Tutorials
 Tutorials
 ---------
 ---------
@@ -70,10 +70,10 @@ Properties
 +--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
 +--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
 | :ref:`bool<class_bool>`                                            | :ref:`stream_paused<class_AudioStreamPlayer3D_property_stream_paused>`                                               | ``false``     |
 | :ref:`bool<class_bool>`                                            | :ref:`stream_paused<class_AudioStreamPlayer3D_property_stream_paused>`                                               | ``false``     |
 +--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
 +--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
-| :ref:`float<class_float>`                                          | :ref:`unit_db<class_AudioStreamPlayer3D_property_unit_db>`                                                           | ``0.0``       |
-+--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
 | :ref:`float<class_float>`                                          | :ref:`unit_size<class_AudioStreamPlayer3D_property_unit_size>`                                                       | ``10.0``      |
 | :ref:`float<class_float>`                                          | :ref:`unit_size<class_AudioStreamPlayer3D_property_unit_size>`                                                       | ``10.0``      |
 +--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
 +--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
+| :ref:`float<class_float>`                                          | :ref:`volume_db<class_AudioStreamPlayer3D_property_volume_db>`                                                       | ``0.0``       |
++--------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+---------------+
 
 
 Methods
 Methods
 -------
 -------
@@ -429,22 +429,6 @@ If ``true``, the playback is paused. You can resume it by setting :ref:`stream_p
 
 
 ----
 ----
 
 
-.. _class_AudioStreamPlayer3D_property_unit_db:
-
-- :ref:`float<class_float>` **unit_db**
-
-+-----------+--------------------+
-| *Default* | ``0.0``            |
-+-----------+--------------------+
-| *Setter*  | set_unit_db(value) |
-+-----------+--------------------+
-| *Getter*  | get_unit_db()      |
-+-----------+--------------------+
-
-The base sound level unaffected by dampening, in decibels.
-
-----
-
 .. _class_AudioStreamPlayer3D_property_unit_size:
 .. _class_AudioStreamPlayer3D_property_unit_size:
 
 
 - :ref:`float<class_float>` **unit_size**
 - :ref:`float<class_float>` **unit_size**
@@ -459,6 +443,22 @@ The base sound level unaffected by dampening, in decibels.
 
 
 The factor for the attenuation effect. Higher values make the sound audible over a larger distance.
 The factor for the attenuation effect. Higher values make the sound audible over a larger distance.
 
 
+----
+
+.. _class_AudioStreamPlayer3D_property_volume_db:
+
+- :ref:`float<class_float>` **volume_db**
+
++-----------+----------------------+
+| *Default* | ``0.0``              |
++-----------+----------------------+
+| *Setter*  | set_volume_db(value) |
++-----------+----------------------+
+| *Getter*  | get_volume_db()      |
++-----------+----------------------+
+
+The base sound level unaffected by dampening, in decibels.
+
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
 
 

+ 1 - 1
classes/class_basematerial3d.rst

@@ -2691,7 +2691,7 @@ Returns ``true``, if the specified flag is enabled. See :ref:`Flags<enum_BaseMat
 
 
 - :ref:`Texture2D<class_Texture2D>` **get_texture** **(** :ref:`TextureParam<enum_BaseMaterial3D_TextureParam>` param **)** |const|
 - :ref:`Texture2D<class_Texture2D>` **get_texture** **(** :ref:`TextureParam<enum_BaseMaterial3D_TextureParam>` param **)** |const|
 
 
-Returns the :ref:`Texture<class_Texture>` associated with the specified :ref:`TextureParam<enum_BaseMaterial3D_TextureParam>`.
+Returns the :ref:`Texture2D<class_Texture2D>` associated with the specified :ref:`TextureParam<enum_BaseMaterial3D_TextureParam>`.
 
 
 ----
 ----
 
 

+ 1 - 1
classes/class_basis.rst

@@ -270,7 +270,7 @@ Constructs a pure scale basis matrix with no rotation or shearing. The scale val
 
 
 - :ref:`Vector3<class_Vector3>` **get_euler** **(** :ref:`int<class_int>` order=2 **)** |const|
 - :ref:`Vector3<class_Vector3>` **get_euler** **(** :ref:`int<class_int>` order=2 **)** |const|
 
 
-Returns the basis's rotation in the form of Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last). The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
+Returns the basis's rotation in the form of Euler angles. The Euler order depends on the ``order`` parameter, by default it uses the YXZ convention: when decomposing, first Z, then X, and Y last. The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
 
 
 Consider using the :ref:`get_rotation_quaternion<class_Basis_method_get_rotation_quaternion>` method instead, which returns a :ref:`Quaternion<class_Quaternion>` quaternion instead of Euler angles.
 Consider using the :ref:`get_rotation_quaternion<class_Basis_method_get_rotation_quaternion>` method instead, which returns a :ref:`Quaternion<class_Quaternion>` quaternion instead of Euler angles.
 
 

+ 10 - 0
classes/class_callable.rst

@@ -71,6 +71,8 @@ Methods
 +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
 +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
 | void                                | :ref:`call_deferred<class_Callable_method_call_deferred>` **(** ... **)** |vararg| |const|                  |
 | void                                | :ref:`call_deferred<class_Callable_method_call_deferred>` **(** ... **)** |vararg| |const|                  |
 +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
 +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`       | :ref:`callv<class_Callable_method_callv>` **(** :ref:`Array<class_Array>` arguments **)** |const|           |
++-------------------------------------+-------------------------------------------------------------------------------------------------------------+
 | :ref:`StringName<class_StringName>` | :ref:`get_method<class_Callable_method_get_method>` **(** **)** |const|                                     |
 | :ref:`StringName<class_StringName>` | :ref:`get_method<class_Callable_method_get_method>` **(** **)** |const|                                     |
 +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
 +-------------------------------------+-------------------------------------------------------------------------------------------------------------+
 | :ref:`Object<class_Object>`         | :ref:`get_object<class_Callable_method_get_object>` **(** **)** |const|                                     |
 | :ref:`Object<class_Object>`         | :ref:`get_object<class_Callable_method_get_object>` **(** **)** |const|                                     |
@@ -156,6 +158,14 @@ Calls the method represented by this ``Callable`` in deferred mode, i.e. during
 
 
 ----
 ----
 
 
+.. _class_Callable_method_callv:
+
+- :ref:`Variant<class_Variant>` **callv** **(** :ref:`Array<class_Array>` arguments **)** |const|
+
+Calls the method represented by this ``Callable``. Contrary to :ref:`call<class_Callable_method_call>`, this method does not take a variable number of arguments but expects all arguments to be passed via a single :ref:`Array<class_Array>`.
+
+----
+
 .. _class_Callable_method_get_method:
 .. _class_Callable_method_get_method:
 
 
 - :ref:`StringName<class_StringName>` **get_method** **(** **)** |const|
 - :ref:`StringName<class_StringName>` **get_method** **(** **)** |const|

+ 99 - 61
classes/class_camera2d.rst

@@ -37,57 +37,61 @@ Tutorials
 Properties
 Properties
 ----------
 ----------
 
 
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`AnchorMode<enum_Camera2D_AnchorMode>`                           | :ref:`anchor_mode<class_Camera2D_property_anchor_mode>`                         | ``1``             |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`current<class_Camera2D_property_current>`                                 | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`Node<class_Node>`                                               | :ref:`custom_viewport<class_Camera2D_property_custom_viewport>`                 |                   |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`drag_bottom_margin<class_Camera2D_property_drag_bottom_margin>`           | ``0.2``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`drag_horizontal_enabled<class_Camera2D_property_drag_horizontal_enabled>` | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`drag_horizontal_offset<class_Camera2D_property_drag_horizontal_offset>`   | ``0.0``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`drag_left_margin<class_Camera2D_property_drag_left_margin>`               | ``0.2``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`drag_right_margin<class_Camera2D_property_drag_right_margin>`             | ``0.2``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`drag_top_margin<class_Camera2D_property_drag_top_margin>`                 | ``0.2``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`drag_vertical_enabled<class_Camera2D_property_drag_vertical_enabled>`     | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`drag_vertical_offset<class_Camera2D_property_drag_vertical_offset>`       | ``0.0``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`editor_draw_drag_margin<class_Camera2D_property_editor_draw_drag_margin>` | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`editor_draw_limits<class_Camera2D_property_editor_draw_limits>`           | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`editor_draw_screen<class_Camera2D_property_editor_draw_screen>`           | ``true``          |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`int<class_int>`                                                 | :ref:`limit_bottom<class_Camera2D_property_limit_bottom>`                       | ``10000000``      |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`int<class_int>`                                                 | :ref:`limit_left<class_Camera2D_property_limit_left>`                           | ``-10000000``     |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`int<class_int>`                                                 | :ref:`limit_right<class_Camera2D_property_limit_right>`                         | ``10000000``      |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`limit_smoothed<class_Camera2D_property_limit_smoothed>`                   | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`int<class_int>`                                                 | :ref:`limit_top<class_Camera2D_property_limit_top>`                             | ``-10000000``     |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`Vector2<class_Vector2>`                                         | :ref:`offset<class_Camera2D_property_offset>`                                   | ``Vector2(0, 0)`` |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`Camera2DProcessCallback<enum_Camera2D_Camera2DProcessCallback>` | :ref:`process_callback<class_Camera2D_property_process_callback>`               | ``1``             |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`rotating<class_Camera2D_property_rotating>`                               | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`bool<class_bool>`                                               | :ref:`smoothing_enabled<class_Camera2D_property_smoothing_enabled>`             | ``false``         |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`float<class_float>`                                             | :ref:`smoothing_speed<class_Camera2D_property_smoothing_speed>`                 | ``5.0``           |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
-| :ref:`Vector2<class_Vector2>`                                         | :ref:`zoom<class_Camera2D_property_zoom>`                                       | ``Vector2(1, 1)`` |
-+-----------------------------------------------------------------------+---------------------------------------------------------------------------------+-------------------+
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`AnchorMode<enum_Camera2D_AnchorMode>`                           | :ref:`anchor_mode<class_Camera2D_property_anchor_mode>`                               | ``1``             |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`current<class_Camera2D_property_current>`                                       | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`Node<class_Node>`                                               | :ref:`custom_viewport<class_Camera2D_property_custom_viewport>`                       |                   |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`drag_bottom_margin<class_Camera2D_property_drag_bottom_margin>`                 | ``0.2``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`drag_horizontal_enabled<class_Camera2D_property_drag_horizontal_enabled>`       | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`drag_horizontal_offset<class_Camera2D_property_drag_horizontal_offset>`         | ``0.0``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`drag_left_margin<class_Camera2D_property_drag_left_margin>`                     | ``0.2``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`drag_right_margin<class_Camera2D_property_drag_right_margin>`                   | ``0.2``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`drag_top_margin<class_Camera2D_property_drag_top_margin>`                       | ``0.2``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`drag_vertical_enabled<class_Camera2D_property_drag_vertical_enabled>`           | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`drag_vertical_offset<class_Camera2D_property_drag_vertical_offset>`             | ``0.0``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`editor_draw_drag_margin<class_Camera2D_property_editor_draw_drag_margin>`       | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`editor_draw_limits<class_Camera2D_property_editor_draw_limits>`                 | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`editor_draw_screen<class_Camera2D_property_editor_draw_screen>`                 | ``true``          |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`ignore_rotation<class_Camera2D_property_ignore_rotation>`                       | ``true``          |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`int<class_int>`                                                 | :ref:`limit_bottom<class_Camera2D_property_limit_bottom>`                             | ``10000000``      |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`int<class_int>`                                                 | :ref:`limit_left<class_Camera2D_property_limit_left>`                                 | ``-10000000``     |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`int<class_int>`                                                 | :ref:`limit_right<class_Camera2D_property_limit_right>`                               | ``10000000``      |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`limit_smoothed<class_Camera2D_property_limit_smoothed>`                         | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`int<class_int>`                                                 | :ref:`limit_top<class_Camera2D_property_limit_top>`                                   | ``-10000000``     |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`Vector2<class_Vector2>`                                         | :ref:`offset<class_Camera2D_property_offset>`                                         | ``Vector2(0, 0)`` |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`Camera2DProcessCallback<enum_Camera2D_Camera2DProcessCallback>` | :ref:`process_callback<class_Camera2D_property_process_callback>`                     | ``1``             |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`rotation_smoothing_enabled<class_Camera2D_property_rotation_smoothing_enabled>` | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`rotation_smoothing_speed<class_Camera2D_property_rotation_smoothing_speed>`     | ``5.0``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`bool<class_bool>`                                               | :ref:`smoothing_enabled<class_Camera2D_property_smoothing_enabled>`                   | ``false``         |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`float<class_float>`                                             | :ref:`smoothing_speed<class_Camera2D_property_smoothing_speed>`                       | ``5.0``           |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
+| :ref:`Vector2<class_Vector2>`                                         | :ref:`zoom<class_Camera2D_property_zoom>`                                             | ``Vector2(1, 1)`` |
++-----------------------------------------------------------------------+---------------------------------------------------------------------------------------+-------------------+
 
 
 Methods
 Methods
 -------
 -------
@@ -370,6 +374,22 @@ If ``true``, draws the camera's screen rectangle in the editor.
 
 
 ----
 ----
 
 
+.. _class_Camera2D_property_ignore_rotation:
+
+- :ref:`bool<class_bool>` **ignore_rotation**
+
++-----------+----------------------------+
+| *Default* | ``true``                   |
++-----------+----------------------------+
+| *Setter*  | set_ignore_rotation(value) |
++-----------+----------------------------+
+| *Getter*  | is_ignoring_rotation()     |
++-----------+----------------------------+
+
+If ``true``, the camera's rendered view is not affected by its :ref:`Node2D.rotation<class_Node2D_property_rotation>` and :ref:`Node2D.global_rotation<class_Node2D_property_global_rotation>`.
+
+----
+
 .. _class_Camera2D_property_limit_bottom:
 .. _class_Camera2D_property_limit_bottom:
 
 
 - :ref:`int<class_int>` **limit_bottom**
 - :ref:`int<class_int>` **limit_bottom**
@@ -486,19 +506,37 @@ The camera's process callback. See :ref:`Camera2DProcessCallback<enum_Camera2D_C
 
 
 ----
 ----
 
 
-.. _class_Camera2D_property_rotating:
+.. _class_Camera2D_property_rotation_smoothing_enabled:
+
+- :ref:`bool<class_bool>` **rotation_smoothing_enabled**
+
++-----------+---------------------------------------+
+| *Default* | ``false``                             |
++-----------+---------------------------------------+
+| *Setter*  | set_rotation_smoothing_enabled(value) |
++-----------+---------------------------------------+
+| *Getter*  | is_rotation_smoothing_enabled()       |
++-----------+---------------------------------------+
+
+If ``true``, the camera's view smoothly rotates, via asymptotic smoothing, to align with its target rotation at :ref:`rotation_smoothing_speed<class_Camera2D_property_rotation_smoothing_speed>`.
+
+\ **Note:** This property has no effect if :ref:`ignore_rotation<class_Camera2D_property_ignore_rotation>` is ``true``.
+
+----
+
+.. _class_Camera2D_property_rotation_smoothing_speed:
 
 
-- :ref:`bool<class_bool>` **rotating**
+- :ref:`float<class_float>` **rotation_smoothing_speed**
 
 
-+-----------+---------------------+
-| *Default* | ``false``           |
-+-----------+---------------------+
-| *Setter*  | set_rotating(value) |
-+-----------+---------------------+
-| *Getter*  | is_rotating()       |
-+-----------+---------------------+
++-----------+-------------------------------------+
+| *Default* | ``5.0``                             |
++-----------+-------------------------------------+
+| *Setter*  | set_rotation_smoothing_speed(value) |
++-----------+-------------------------------------+
+| *Getter*  | get_rotation_smoothing_speed()      |
++-----------+-------------------------------------+
 
 
-If ``true``, the camera view rotates with the target.
+The angular, asymptotic speed of the camera's rotation smoothing effect when :ref:`rotation_smoothing_enabled<class_Camera2D_property_rotation_smoothing_enabled>` is ``true``.
 
 
 ----
 ----
 
 

+ 8 - 6
classes/class_canvasitem.rst

@@ -328,6 +328,8 @@ Property Descriptions
 | *Getter*  | is_clipping_children()   |
 | *Getter*  | is_clipping_children()   |
 +-----------+--------------------------+
 +-----------+--------------------------+
 
 
+Allows the current node to clip children nodes, essentially acting as a mask.
+
 ----
 ----
 
 
 .. _class_CanvasItem_property_light_mask:
 .. _class_CanvasItem_property_light_mask:
@@ -724,17 +726,17 @@ Draws ``text`` using the specified ``font`` at the ``pos`` (bottom-left corner u
     # If using this method in a script that redraws constantly, move the
     # If using this method in a script that redraws constantly, move the
     # `default_font` declaration to a member variable assigned in `_ready()`
     # `default_font` declaration to a member variable assigned in `_ready()`
     # so the Control is only created once.
     # so the Control is only created once.
-    var default_font = Control.new().get_font("font")
-    var default_font_size = Control.new().get_font_size("font_size")
-    draw_string(default_font, Vector2(64, 64), "Hello world", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size)
+    var default_font = ThemeDB.fallback_font
+    var default_font_size = ThemeDB.fallback_font_size
+    draw_string(default_font, Vector2(64, 64), "Hello world", HORIZONTAL_ALIGNMENT_LEFT, -1, default_font_size)
 
 
  .. code-tab:: csharp
  .. code-tab:: csharp
 
 
     // If using this method in a script that redraws constantly, move the
     // If using this method in a script that redraws constantly, move the
-    // `default_font` declaration to a member variable assigned in `_ready()`
+    // `default_font` declaration to a member variable assigned in `_Ready()`
     // so the Control is only created once.
     // so the Control is only created once.
-    Font defaultFont = new Control().GetFont("font");
-    int defaultFontSize = new Control().GetFontSize("font_size");
+    Font defaultFont = ThemeDB.FallbackFont;
+    int defaultFontSize = ThemeDB.FallbackFontSize;
     DrawString(defaultFont, new Vector2(64, 64), "Hello world", HORIZONTAL_ALIGNMENT_LEFT, -1, defaultFontSize);
     DrawString(defaultFont, new Vector2(64, 64), "Hello world", HORIZONTAL_ALIGNMENT_LEFT, -1, defaultFontSize);
 
 
 
 

+ 29 - 9
classes/class_collisionshape2d.rst

@@ -35,19 +35,39 @@ Tutorials
 Properties
 Properties
 ----------
 ----------
 
 
-+-------------------------------+-------------------------------------------------------------------------------------------+-----------+
-| :ref:`bool<class_bool>`       | :ref:`disabled<class_CollisionShape2D_property_disabled>`                                 | ``false`` |
-+-------------------------------+-------------------------------------------------------------------------------------------+-----------+
-| :ref:`bool<class_bool>`       | :ref:`one_way_collision<class_CollisionShape2D_property_one_way_collision>`               | ``false`` |
-+-------------------------------+-------------------------------------------------------------------------------------------+-----------+
-| :ref:`float<class_float>`     | :ref:`one_way_collision_margin<class_CollisionShape2D_property_one_way_collision_margin>` | ``1.0``   |
-+-------------------------------+-------------------------------------------------------------------------------------------+-----------+
-| :ref:`Shape2D<class_Shape2D>` | :ref:`shape<class_CollisionShape2D_property_shape>`                                       |           |
-+-------------------------------+-------------------------------------------------------------------------------------------+-----------+
++-------------------------------+-------------------------------------------------------------------------------------------+-----------------------+
+| :ref:`Color<class_Color>`     | :ref:`debug_color<class_CollisionShape2D_property_debug_color>`                           | ``Color(0, 0, 0, 1)`` |
++-------------------------------+-------------------------------------------------------------------------------------------+-----------------------+
+| :ref:`bool<class_bool>`       | :ref:`disabled<class_CollisionShape2D_property_disabled>`                                 | ``false``             |
++-------------------------------+-------------------------------------------------------------------------------------------+-----------------------+
+| :ref:`bool<class_bool>`       | :ref:`one_way_collision<class_CollisionShape2D_property_one_way_collision>`               | ``false``             |
++-------------------------------+-------------------------------------------------------------------------------------------+-----------------------+
+| :ref:`float<class_float>`     | :ref:`one_way_collision_margin<class_CollisionShape2D_property_one_way_collision_margin>` | ``1.0``               |
++-------------------------------+-------------------------------------------------------------------------------------------+-----------------------+
+| :ref:`Shape2D<class_Shape2D>` | :ref:`shape<class_CollisionShape2D_property_shape>`                                       |                       |
++-------------------------------+-------------------------------------------------------------------------------------------+-----------------------+
 
 
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
 
 
+.. _class_CollisionShape2D_property_debug_color:
+
+- :ref:`Color<class_Color>` **debug_color**
+
++-----------+------------------------+
+| *Default* | ``Color(0, 0, 0, 1)``  |
++-----------+------------------------+
+| *Setter*  | set_debug_color(value) |
++-----------+------------------------+
+| *Getter*  | get_debug_color()      |
++-----------+------------------------+
+
+The collision shape debug color.
+
+\ **Note:** The default value is :ref:`ProjectSettings.debug/shapes/collision/shape_color<class_ProjectSettings_property_debug/shapes/collision/shape_color>`. The ``Color(0, 0, 0, 1)`` value documented here is a placeholder, and not the actual default debug color.
+
+----
+
 .. _class_CollisionShape2D_property_disabled:
 .. _class_CollisionShape2D_property_disabled:
 
 
 - :ref:`bool<class_bool>` **disabled**
 - :ref:`bool<class_bool>` **disabled**

+ 89 - 7
classes/class_colorpicker.rst

@@ -50,13 +50,19 @@ Properties
 Methods
 Methods
 -------
 -------
 
 
-+-------------------------------------------------+--------------------------------------------------------------------------------------------------------+
-| void                                            | :ref:`add_preset<class_ColorPicker_method_add_preset>` **(** :ref:`Color<class_Color>` color **)**     |
-+-------------------------------------------------+--------------------------------------------------------------------------------------------------------+
-| void                                            | :ref:`erase_preset<class_ColorPicker_method_erase_preset>` **(** :ref:`Color<class_Color>` color **)** |
-+-------------------------------------------------+--------------------------------------------------------------------------------------------------------+
-| :ref:`PackedColorArray<class_PackedColorArray>` | :ref:`get_presets<class_ColorPicker_method_get_presets>` **(** **)** |const|                           |
-+-------------------------------------------------+--------------------------------------------------------------------------------------------------------+
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
+| void                                            | :ref:`add_preset<class_ColorPicker_method_add_preset>` **(** :ref:`Color<class_Color>` color **)**                   |
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
+| void                                            | :ref:`add_recent_preset<class_ColorPicker_method_add_recent_preset>` **(** :ref:`Color<class_Color>` color **)**     |
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
+| void                                            | :ref:`erase_preset<class_ColorPicker_method_erase_preset>` **(** :ref:`Color<class_Color>` color **)**               |
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
+| void                                            | :ref:`erase_recent_preset<class_ColorPicker_method_erase_recent_preset>` **(** :ref:`Color<class_Color>` color **)** |
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedColorArray<class_PackedColorArray>` | :ref:`get_presets<class_ColorPicker_method_get_presets>` **(** **)** |const|                                         |
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedColorArray<class_PackedColorArray>` | :ref:`get_recent_presets<class_ColorPicker_method_get_recent_presets>` **(** **)** |const|                           |
++-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
 
 
 Theme Properties
 Theme Properties
 ----------------
 ----------------
@@ -78,6 +84,10 @@ Theme Properties
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 | :ref:`Texture2D<class_Texture2D>` | :ref:`color_hue<class_ColorPicker_theme_icon_color_hue>`                       |         |
 | :ref:`Texture2D<class_Texture2D>` | :ref:`color_hue<class_ColorPicker_theme_icon_color_hue>`                       |         |
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`expanded_arrow<class_ColorPicker_theme_icon_expanded_arrow>`             |         |
++-----------------------------------+--------------------------------------------------------------------------------+---------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`folded_arrow<class_ColorPicker_theme_icon_folded_arrow>`                 |         |
++-----------------------------------+--------------------------------------------------------------------------------+---------+
 | :ref:`Texture2D<class_Texture2D>` | :ref:`overbright_indicator<class_ColorPicker_theme_icon_overbright_indicator>` |         |
 | :ref:`Texture2D<class_Texture2D>` | :ref:`overbright_indicator<class_ColorPicker_theme_icon_overbright_indicator>` |         |
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 | :ref:`Texture2D<class_Texture2D>` | :ref:`picker_cursor<class_ColorPicker_theme_icon_picker_cursor>`               |         |
 | :ref:`Texture2D<class_Texture2D>` | :ref:`picker_cursor<class_ColorPicker_theme_icon_picker_cursor>`               |         |
@@ -86,6 +96,12 @@ Theme Properties
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 | :ref:`Texture2D<class_Texture2D>` | :ref:`screen_picker<class_ColorPicker_theme_icon_screen_picker>`               |         |
 | :ref:`Texture2D<class_Texture2D>` | :ref:`screen_picker<class_ColorPicker_theme_icon_screen_picker>`               |         |
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
 +-----------------------------------+--------------------------------------------------------------------------------+---------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`shape_circle<class_ColorPicker_theme_icon_shape_circle>`                 |         |
++-----------------------------------+--------------------------------------------------------------------------------+---------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`shape_rect<class_ColorPicker_theme_icon_shape_rect>`                     |         |
++-----------------------------------+--------------------------------------------------------------------------------+---------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`shape_rect_wheel<class_ColorPicker_theme_icon_shape_rect_wheel>`         |         |
++-----------------------------------+--------------------------------------------------------------------------------+---------+
 
 
 Signals
 Signals
 -------
 -------
@@ -287,6 +303,16 @@ Adds the given color to a list of color presets. The presets are displayed in th
 
 
 ----
 ----
 
 
+.. _class_ColorPicker_method_add_recent_preset:
+
+- void **add_recent_preset** **(** :ref:`Color<class_Color>` color **)**
+
+Adds the given color to a list of color recent presets so that it can be picked later. Recent presets are the colors that were picked recently, a new preset is automatically created and added to recent presets when you pick a new color.
+
+\ **Note:** The recent presets list is only for *this* color picker.
+
+----
+
 .. _class_ColorPicker_method_erase_preset:
 .. _class_ColorPicker_method_erase_preset:
 
 
 - void **erase_preset** **(** :ref:`Color<class_Color>` color **)**
 - void **erase_preset** **(** :ref:`Color<class_Color>` color **)**
@@ -295,12 +321,28 @@ Removes the given color from the list of color presets of this color picker.
 
 
 ----
 ----
 
 
+.. _class_ColorPicker_method_erase_recent_preset:
+
+- void **erase_recent_preset** **(** :ref:`Color<class_Color>` color **)**
+
+Removes the given color from the list of color recent presets of this color picker.
+
+----
+
 .. _class_ColorPicker_method_get_presets:
 .. _class_ColorPicker_method_get_presets:
 
 
 - :ref:`PackedColorArray<class_PackedColorArray>` **get_presets** **(** **)** |const|
 - :ref:`PackedColorArray<class_PackedColorArray>` **get_presets** **(** **)** |const|
 
 
 Returns the list of colors in the presets of the color picker.
 Returns the list of colors in the presets of the color picker.
 
 
+----
+
+.. _class_ColorPicker_method_get_recent_presets:
+
+- :ref:`PackedColorArray<class_PackedColorArray>` **get_recent_presets** **(** **)** |const|
+
+Returns the list of colors in the recent presets of the color picker.
+
 Theme Property Descriptions
 Theme Property Descriptions
 ---------------------------
 ---------------------------
 
 
@@ -386,6 +428,22 @@ Custom texture for the hue selection slider on the right.
 
 
 ----
 ----
 
 
+.. _class_ColorPicker_theme_icon_expanded_arrow:
+
+- :ref:`Texture2D<class_Texture2D>` **expanded_arrow**
+
+The icon for color preset drop down menu when expanded.
+
+----
+
+.. _class_ColorPicker_theme_icon_folded_arrow:
+
+- :ref:`Texture2D<class_Texture2D>` **folded_arrow**
+
+The icon for color preset drop down menu when folded.
+
+----
+
 .. _class_ColorPicker_theme_icon_overbright_indicator:
 .. _class_ColorPicker_theme_icon_overbright_indicator:
 
 
 - :ref:`Texture2D<class_Texture2D>` **overbright_indicator**
 - :ref:`Texture2D<class_Texture2D>` **overbright_indicator**
@@ -412,6 +470,30 @@ The indicator used to signalize that the color value is outside the 0-1 range.
 
 
 The icon for the screen color picker button.
 The icon for the screen color picker button.
 
 
+----
+
+.. _class_ColorPicker_theme_icon_shape_circle:
+
+- :ref:`Texture2D<class_Texture2D>` **shape_circle**
+
+The icon for circular picker shapes.
+
+----
+
+.. _class_ColorPicker_theme_icon_shape_rect:
+
+- :ref:`Texture2D<class_Texture2D>` **shape_rect**
+
+The icon for rectangular picker shapes.
+
+----
+
+.. _class_ColorPicker_theme_icon_shape_rect_wheel:
+
+- :ref:`Texture2D<class_Texture2D>` **shape_rect_wheel**
+
+The icon for rectangular wheel picker shapes.
+
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 15 - 15
classes/class_control.rst

@@ -25,13 +25,13 @@ For more information on Godot's UI system, anchors, offsets, and containers, see
 
 
 \ **User Interface nodes and input**\ 
 \ **User Interface nodes and input**\ 
 
 
-Godot sends input events to the scene's root node first, by calling :ref:`Node._input<class_Node_method__input>`. :ref:`Node._input<class_Node_method__input>` forwards the event down the node tree to the nodes under the mouse cursor, or on keyboard focus. To do so, it calls ``MainLoop._input_event``.
+Godot propagates input events via viewports. Each :ref:`Viewport<class_Viewport>` is responsible for propagating :ref:`InputEvent<class_InputEvent>`\ s to their child nodes. As the :ref:`SceneTree.root<class_SceneTree_property_root>` is a :ref:`Window<class_Window>`, this already happens automatically for all UI elements in your game.
 
 
-\ **FIXME:** No longer valid after DisplayServer split and Input refactoring.
+Input events are propagated through the :ref:`SceneTree<class_SceneTree>` from the root node to all child nodes by calling :ref:`Node._input<class_Node_method__input>`. For UI elements specifically, it makes more sense to override the virtual method :ref:`_gui_input<class_Control_method__gui_input>`, which filters out unrelated input events, such as by checking z-order, :ref:`mouse_filter<class_Control_property_mouse_filter>`, focus, or if the event was inside of the control's bounding box.
 
 
 Call :ref:`accept_event<class_Control_method_accept_event>` so no other node receives the event. Once you accept an input, it becomes handled so :ref:`Node._unhandled_input<class_Node_method__unhandled_input>` will not process it.
 Call :ref:`accept_event<class_Control_method_accept_event>` so no other node receives the event. Once you accept an input, it becomes handled so :ref:`Node._unhandled_input<class_Node_method__unhandled_input>` will not process it.
 
 
-Only one ``Control`` node can be in keyboard focus. Only the node in focus will receive keyboard events. To get the focus, call :ref:`grab_focus<class_Control_method_grab_focus>`. ``Control`` nodes lose focus when another node grabs it, or if you hide the node in focus.
+Only one ``Control`` node can be in focus. Only the node in focus will receive events. To get the focus, call :ref:`grab_focus<class_Control_method_grab_focus>`. ``Control`` nodes lose focus when another node grabs it, or if you hide the node in focus.
 
 
 Sets :ref:`mouse_filter<class_Control_property_mouse_filter>` to :ref:`MOUSE_FILTER_IGNORE<class_Control_constant_MOUSE_FILTER_IGNORE>` to tell a ``Control`` node to ignore mouse or touch events. You'll need it if you place an icon on top of a button.
 Sets :ref:`mouse_filter<class_Control_property_mouse_filter>` to :ref:`MOUSE_FILTER_IGNORE<class_Control_constant_MOUSE_FILTER_IGNORE>` to tell a ``Control`` node to ignore mouse or touch events. You'll need it if you place an icon on top of a button.
 
 
@@ -307,7 +307,7 @@ Signals
 
 
 - **focus_entered** **(** **)**
 - **focus_entered** **(** **)**
 
 
-Emitted when the node gains keyboard focus.
+Emitted when the node gains focus.
 
 
 ----
 ----
 
 
@@ -315,7 +315,7 @@ Emitted when the node gains keyboard focus.
 
 
 - **focus_exited** **(** **)**
 - **focus_exited** **(** **)**
 
 
-Emitted when the node loses keyboard focus.
+Emitted when the node loses focus.
 
 
 ----
 ----
 
 
@@ -402,7 +402,7 @@ enum **FocusMode**:
 
 
 - **FOCUS_CLICK** = **1** --- The node can only grab focus on mouse clicks. Use with :ref:`focus_mode<class_Control_property_focus_mode>`.
 - **FOCUS_CLICK** = **1** --- The node can only grab focus on mouse clicks. Use with :ref:`focus_mode<class_Control_property_focus_mode>`.
 
 
-- **FOCUS_ALL** = **2** --- The node can grab focus on mouse click or using the arrows and the Tab keys on the keyboard. Use with :ref:`focus_mode<class_Control_property_focus_mode>`.
+- **FOCUS_ALL** = **2** --- The node can grab focus on mouse click, using the arrows and the Tab keys on the keyboard, or using the D-pad buttons on a gamepad. Use with :ref:`focus_mode<class_Control_property_focus_mode>`.
 
 
 ----
 ----
 
 
@@ -866,7 +866,7 @@ The minimum size of the node's bounding rectangle. If you set it to a value grea
 | *Getter*  | get_focus_mode()      |
 | *Getter*  | get_focus_mode()      |
 +-----------+-----------------------+
 +-----------+-----------------------+
 
 
-The focus access mode for the control (None, Click or All). Only one Control can be focused at the same time, and it will receive keyboard signals.
+The focus access mode for the control (None, Click or All). Only one Control can be focused at the same time, and it will receive keyboard, gamepad, and mouse signals.
 
 
 ----
 ----
 
 
@@ -882,7 +882,7 @@ The focus access mode for the control (None, Click or All). Only one Control can
 | *Getter*  | get_focus_neighbor()      |
 | *Getter*  | get_focus_neighbor()      |
 +-----------+---------------------------+
 +-----------+---------------------------+
 
 
-Tells Godot which node it should give keyboard focus to if the user presses the down arrow on the keyboard or down on a gamepad by default. You can change the key by editing the ``ui_down`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the bottom of this one.
+Tells Godot which node it should give focus to if the user presses the down arrow on the keyboard or down on a gamepad by default. You can change the key by editing the ``ui_down`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the bottom of this one.
 
 
 ----
 ----
 
 
@@ -898,7 +898,7 @@ Tells Godot which node it should give keyboard focus to if the user presses the
 | *Getter*  | get_focus_neighbor()      |
 | *Getter*  | get_focus_neighbor()      |
 +-----------+---------------------------+
 +-----------+---------------------------+
 
 
-Tells Godot which node it should give keyboard focus to if the user presses the left arrow on the keyboard or left on a gamepad by default. You can change the key by editing the ``ui_left`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the left of this one.
+Tells Godot which node it should give focus to if the user presses the left arrow on the keyboard or left on a gamepad by default. You can change the key by editing the ``ui_left`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the left of this one.
 
 
 ----
 ----
 
 
@@ -914,7 +914,7 @@ Tells Godot which node it should give keyboard focus to if the user presses the
 | *Getter*  | get_focus_neighbor()      |
 | *Getter*  | get_focus_neighbor()      |
 +-----------+---------------------------+
 +-----------+---------------------------+
 
 
-Tells Godot which node it should give keyboard focus to if the user presses the right arrow on the keyboard or right on a gamepad by default. You can change the key by editing the ``ui_right`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the bottom of this one.
+Tells Godot which node it should give focus to if the user presses the right arrow on the keyboard or right on a gamepad by default. You can change the key by editing the ``ui_right`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the bottom of this one.
 
 
 ----
 ----
 
 
@@ -930,7 +930,7 @@ Tells Godot which node it should give keyboard focus to if the user presses the
 | *Getter*  | get_focus_neighbor()      |
 | *Getter*  | get_focus_neighbor()      |
 +-----------+---------------------------+
 +-----------+---------------------------+
 
 
-Tells Godot which node it should give keyboard focus to if the user presses the top arrow on the keyboard or top on a gamepad by default. You can change the key by editing the ``ui_top`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the bottom of this one.
+Tells Godot which node it should give focus to if the user presses the top arrow on the keyboard or top on a gamepad by default. You can change the key by editing the ``ui_top`` input action. The node must be a ``Control``. If this property is not set, Godot will give focus to the closest ``Control`` to the bottom of this one.
 
 
 ----
 ----
 
 
@@ -946,7 +946,7 @@ Tells Godot which node it should give keyboard focus to if the user presses the
 | *Getter*  | get_focus_next()      |
 | *Getter*  | get_focus_next()      |
 +-----------+-----------------------+
 +-----------+-----------------------+
 
 
-Tells Godot which node it should give keyboard focus to if the user presses :kbd:`Tab` on a keyboard by default. You can change the key by editing the ``ui_focus_next`` input action.
+Tells Godot which node it should give focus to if the user presses :kbd:`Tab` on a keyboard by default. You can change the key by editing the ``ui_focus_next`` input action.
 
 
 If this property is not set, Godot will select a "best guess" based on surrounding nodes in the scene tree.
 If this property is not set, Godot will select a "best guess" based on surrounding nodes in the scene tree.
 
 
@@ -964,7 +964,7 @@ If this property is not set, Godot will select a "best guess" based on surroundi
 | *Getter*  | get_focus_previous()      |
 | *Getter*  | get_focus_previous()      |
 +-----------+---------------------------+
 +-----------+---------------------------+
 
 
-Tells Godot which node it should give keyboard focus to if the user presses :kbd:`Shift + Tab` on a keyboard by default. You can change the key by editing the ``ui_focus_prev`` input action.
+Tells Godot which node it should give focus to if the user presses :kbd:`Shift + Tab` on a keyboard by default. You can change the key by editing the ``ui_focus_prev`` input action.
 
 
 If this property is not set, Godot will select a "best guess" based on surrounding nodes in the scene tree.
 If this property is not set, Godot will select a "best guess" based on surrounding nodes in the scene tree.
 
 
@@ -1998,7 +1998,7 @@ See :ref:`get_theme_color<class_Control_method_get_theme_color>` for details.
 
 
 Returns the tooltip text ``at_position`` in local coordinates, which will typically appear when the cursor is resting over this control. By default, it returns :ref:`tooltip_text<class_Control_property_tooltip_text>`.
 Returns the tooltip text ``at_position`` in local coordinates, which will typically appear when the cursor is resting over this control. By default, it returns :ref:`tooltip_text<class_Control_property_tooltip_text>`.
 
 
-\ **Note:** This method can be overriden to customise its behaviour. If this method returns an empty :ref:`String<class_String>`, no tooltip is displayed.
+\ **Note:** This method can be overridden to customise its behaviour. If this method returns an empty :ref:`String<class_String>`, no tooltip is displayed.
 
 
 ----
 ----
 
 
@@ -2187,7 +2187,7 @@ Returns ``true`` if layout is right-to-left.
 
 
 - void **release_focus** **(** **)**
 - void **release_focus** **(** **)**
 
 
-Give up the focus. No other control will be able to receive keyboard input.
+Give up the focus. No other control will be able to receive input.
 
 
 ----
 ----
 
 

+ 2 - 2
classes/class_cubemap.rst

@@ -17,11 +17,11 @@ Cubemap
 Description
 Description
 -----------
 -----------
 
 
-A cubemap is a 6-sided texture typically used for faking reflections in 3D rendering. It can be used to make an object look as if it's reflecting its surroundings. This usually delivers much better performance than other reflection methods.
+A cubemap is made of 6 textures organized in layers. They are typically used for faking reflections (see :ref:`ReflectionProbe<class_ReflectionProbe>`) in 3D rendering. It can be used to make an object look as if it's reflecting its surroundings. This usually delivers much better performance than other reflection methods.
 
 
 This resource is typically used as a uniform in custom shaders. Few core Godot methods make use of Cubemap resources.
 This resource is typically used as a uniform in custom shaders. Few core Godot methods make use of Cubemap resources.
 
 
-\ **Note:** Godot doesn't support using cubemaps as a :ref:`PanoramaSkyMaterial<class_PanoramaSkyMaterial>`. You can use `this tool <https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/cubemap_to_panorama.html>`__ to convert a cube map to an equirectangular sky map.
+\ **Note:** Godot doesn't support using cubemaps in a :ref:`PanoramaSkyMaterial<class_PanoramaSkyMaterial>`. You can use `this tool <https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/cubemap_to_panorama.html>`__ to convert a cubemap to an equirectangular sky map.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 11 - 0
classes/class_cubemaparray.rst

@@ -12,7 +12,18 @@ CubemapArray
 
 
 **Inherits:** :ref:`ImageTextureLayered<class_ImageTextureLayered>` **<** :ref:`TextureLayered<class_TextureLayered>` **<** :ref:`Texture<class_Texture>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 **Inherits:** :ref:`ImageTextureLayered<class_ImageTextureLayered>` **<** :ref:`TextureLayered<class_TextureLayered>` **<** :ref:`Texture<class_Texture>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 
 
+A single composite texture resource which consists of multiple :ref:`Cubemap<class_Cubemap>`\ s.
 
 
+Description
+-----------
+
+``CubemapArray``\ s are made of an array of :ref:`Cubemap<class_Cubemap>`\ s. Accordingly, like :ref:`Cubemap<class_Cubemap>`\ s they are made of multiple textures the amount of which must be divisible by 6 (one image for each face of the cube). The primary benefit of ``CubemapArray``\ s is that they can be accessed in shader code using a single texture reference. In other words, you can pass multiple :ref:`Cubemap<class_Cubemap>`\ s into a shader using a single ``CubemapArray``.
+
+Generally, ``CubemapArray``\ s provide a more efficient way for storing multiple :ref:`Cubemap<class_Cubemap>`\ s, than storing multiple :ref:`Cubemap<class_Cubemap>`\ s themselves in an array.
+
+Internally Godot, uses ``CubemapArray``\ s for many effects including the :ref:`Sky<class_Sky>`, if you set :ref:`ProjectSettings.rendering/reflections/sky_reflections/texture_array_reflections<class_ProjectSettings_property_rendering/reflections/sky_reflections/texture_array_reflections>` to ``true``.
+
+\ **Note:** ``CubemapArray`` is not supported in the OpenGL 3 rendering backend.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 481 - 0
classes/class_diraccess.rst

@@ -0,0 +1,481 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/DirAccess.xml.
+
+.. _class_DirAccess:
+
+DirAccess
+=========
+
+**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Type used to handle the filesystem.
+
+Description
+-----------
+
+Directory type. It is used to manage directories and their content (not restricted to the project folder).
+
+\ ``DirAccess`` can't be instantiated directly. Instead it is created with a static method that takes a path for which it will be opened.
+
+Most of the methods have a static alternative that can be used without creating a ``DirAccess``. Static methods only support absolute paths (including ``res://`` and ``user://``).
+
+::
+
+    # Standard
+    var dir = DirAccess.open("user://levels")
+    dir.make_dir("world1")
+    # Static
+    DirAccess.make_dir_absolute("user://levels/world1")
+
+\ **Note:** Many resources types are imported (e.g. textures or sound files), and their source asset will not be included in the exported game, as only the imported version is used. Use :ref:`ResourceLoader<class_ResourceLoader>` to access imported resources.
+
+Here is an example on how to iterate through the files of a directory:
+
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    func dir_contents(path):
+        var dir = DirAccess.open(path)
+        if dir:
+            dir.list_dir_begin()
+            var file_name = dir.get_next()
+            while file_name != "":
+                if dir.current_is_dir():
+                    print("Found directory: " + file_name)
+                else:
+                    print("Found file: " + file_name)
+                file_name = dir.get_next()
+        else:
+            print("An error occurred when trying to access the path.")
+
+ .. code-tab:: csharp
+
+    public void DirContents(string path)
+    {
+        using var dir = DirAccess.Open(path);
+        if (dir != null)
+        {
+            dir.ListDirBegin();
+            string fileName = dir.GetNext();
+            while (fileName != "")
+            {
+                if (dir.CurrentIsDir())
+                {
+                    GD.Print("Found directory: " + fileName);
+                }
+                else
+                {
+                    GD.Print("Found file: " + fileName);
+                }
+                fileName = dir.GetNext();
+            }
+        }
+        else
+        {
+            GD.Print("An error occurred when trying to access the path.");
+        }
+    }
+
+
+
+Tutorials
+---------
+
+- :doc:`File system <../tutorials/scripting/filesystem>`
+
+Properties
+----------
+
++-------------------------+----------------------------------------------------------------------------+
+| :ref:`bool<class_bool>` | :ref:`include_hidden<class_DirAccess_property_include_hidden>`             |
++-------------------------+----------------------------------------------------------------------------+
+| :ref:`bool<class_bool>` | :ref:`include_navigational<class_DirAccess_property_include_navigational>` |
++-------------------------+----------------------------------------------------------------------------+
+
+Methods
+-------
+
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`change_dir<class_DirAccess_method_change_dir>` **(** :ref:`String<class_String>` to_dir **)**                                                                                    |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`copy<class_DirAccess_method_copy>` **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to, :ref:`int<class_int>` chmod_flags=-1 **)**                            |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`copy_absolute<class_DirAccess_method_copy_absolute>` **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to, :ref:`int<class_int>` chmod_flags=-1 **)** |static| |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`current_is_dir<class_DirAccess_method_current_is_dir>` **(** **)** |const|                                                                                                       |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`dir_exists<class_DirAccess_method_dir_exists>` **(** :ref:`String<class_String>` path **)**                                                                                      |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`dir_exists_absolute<class_DirAccess_method_dir_exists_absolute>` **(** :ref:`String<class_String>` path **)** |static|                                                           |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`file_exists<class_DirAccess_method_file_exists>` **(** :ref:`String<class_String>` path **)**                                                                                    |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_current_dir<class_DirAccess_method_get_current_dir>` **(** :ref:`bool<class_bool>` include_drive=true **)** |const|                                                          |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_current_drive<class_DirAccess_method_get_current_drive>` **(** **)**                                                                                                         |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_directories<class_DirAccess_method_get_directories>` **(** **)**                                                                                                             |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_directories_at<class_DirAccess_method_get_directories_at>` **(** :ref:`String<class_String>` path **)** |static|                                                             |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_drive_count<class_DirAccess_method_get_drive_count>` **(** **)** |static|                                                                                                    |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_drive_name<class_DirAccess_method_get_drive_name>` **(** :ref:`int<class_int>` idx **)** |static|                                                                            |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_files<class_DirAccess_method_get_files>` **(** **)**                                                                                                                         |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_files_at<class_DirAccess_method_get_files_at>` **(** :ref:`String<class_String>` path **)** |static|                                                                         |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_next<class_DirAccess_method_get_next>` **(** **)**                                                                                                                           |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`get_open_error<class_DirAccess_method_get_open_error>` **(** **)** |static|                                                                                                      |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_space_left<class_DirAccess_method_get_space_left>` **(** **)**                                                                                                               |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`list_dir_begin<class_DirAccess_method_list_dir_begin>` **(** **)**                                                                                                               |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`list_dir_end<class_DirAccess_method_list_dir_end>` **(** **)**                                                                                                                   |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`make_dir<class_DirAccess_method_make_dir>` **(** :ref:`String<class_String>` path **)**                                                                                          |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`make_dir_absolute<class_DirAccess_method_make_dir_absolute>` **(** :ref:`String<class_String>` path **)** |static|                                                               |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`make_dir_recursive<class_DirAccess_method_make_dir_recursive>` **(** :ref:`String<class_String>` path **)**                                                                      |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`make_dir_recursive_absolute<class_DirAccess_method_make_dir_recursive_absolute>` **(** :ref:`String<class_String>` path **)** |static|                                           |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`DirAccess<class_DirAccess>`                 | :ref:`open<class_DirAccess_method_open>` **(** :ref:`String<class_String>` path **)** |static|                                                                                         |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`remove<class_DirAccess_method_remove>` **(** :ref:`String<class_String>` path **)**                                                                                              |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`remove_absolute<class_DirAccess_method_remove_absolute>` **(** :ref:`String<class_String>` path **)** |static|                                                                   |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`rename<class_DirAccess_method_rename>` **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)**                                                              |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`rename_absolute<class_DirAccess_method_rename_absolute>` **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)** |static|                                   |
++---------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+Property Descriptions
+---------------------
+
+.. _class_DirAccess_property_include_hidden:
+
+- :ref:`bool<class_bool>` **include_hidden**
+
++----------+---------------------------+
+| *Setter* | set_include_hidden(value) |
++----------+---------------------------+
+| *Getter* | get_include_hidden()      |
++----------+---------------------------+
+
+If ``true``, hidden files are included when the navigating directory.
+
+Affects :ref:`list_dir_begin<class_DirAccess_method_list_dir_begin>`, :ref:`get_directories<class_DirAccess_method_get_directories>` and :ref:`get_files<class_DirAccess_method_get_files>`.
+
+----
+
+.. _class_DirAccess_property_include_navigational:
+
+- :ref:`bool<class_bool>` **include_navigational**
+
++----------+---------------------------------+
+| *Setter* | set_include_navigational(value) |
++----------+---------------------------------+
+| *Getter* | get_include_navigational()      |
++----------+---------------------------------+
+
+If ``true``, ``.`` and ``..`` are included when navigating the directory.
+
+Affects :ref:`list_dir_begin<class_DirAccess_method_list_dir_begin>` and :ref:`get_directories<class_DirAccess_method_get_directories>`.
+
+Method Descriptions
+-------------------
+
+.. _class_DirAccess_method_change_dir:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **change_dir** **(** :ref:`String<class_String>` to_dir **)**
+
+Changes the currently opened directory to the one passed as an argument. The argument can be relative to the current directory (e.g. ``newdir`` or ``../newdir``), or an absolute path (e.g. ``/tmp/newdir`` or ``res://somedir/newdir``).
+
+Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
+
+----
+
+.. _class_DirAccess_method_copy:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **copy** **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to, :ref:`int<class_int>` chmod_flags=-1 **)**
+
+Copies the ``from`` file to the ``to`` destination. Both arguments should be paths to files, either relative or absolute. If the destination file exists and is not access-protected, it will be overwritten.
+
+If ``chmod_flags`` is different than ``-1``, the Unix permissions for the destination path will be set to the provided value, if available on the current operating system.
+
+Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
+
+----
+
+.. _class_DirAccess_method_copy_absolute:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **copy_absolute** **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to, :ref:`int<class_int>` chmod_flags=-1 **)** |static|
+
+Static version of :ref:`copy<class_DirAccess_method_copy>`. Supports only absolute paths.
+
+----
+
+.. _class_DirAccess_method_current_is_dir:
+
+- :ref:`bool<class_bool>` **current_is_dir** **(** **)** |const|
+
+Returns whether the current item processed with the last :ref:`get_next<class_DirAccess_method_get_next>` call is a directory (``.`` and ``..`` are considered directories).
+
+----
+
+.. _class_DirAccess_method_dir_exists:
+
+- :ref:`bool<class_bool>` **dir_exists** **(** :ref:`String<class_String>` path **)**
+
+Returns whether the target directory exists. The argument can be relative to the current directory, or an absolute path.
+
+----
+
+.. _class_DirAccess_method_dir_exists_absolute:
+
+- :ref:`bool<class_bool>` **dir_exists_absolute** **(** :ref:`String<class_String>` path **)** |static|
+
+Static version of :ref:`dir_exists<class_DirAccess_method_dir_exists>`. Supports only absolute paths.
+
+----
+
+.. _class_DirAccess_method_file_exists:
+
+- :ref:`bool<class_bool>` **file_exists** **(** :ref:`String<class_String>` path **)**
+
+Returns whether the target file exists. The argument can be relative to the current directory, or an absolute path.
+
+For a static equivalent, use :ref:`FileAccess.file_exists<class_FileAccess_method_file_exists>`.
+
+----
+
+.. _class_DirAccess_method_get_current_dir:
+
+- :ref:`String<class_String>` **get_current_dir** **(** :ref:`bool<class_bool>` include_drive=true **)** |const|
+
+Returns the absolute path to the currently opened directory (e.g. ``res://folder`` or ``C:\tmp\folder``).
+
+----
+
+.. _class_DirAccess_method_get_current_drive:
+
+- :ref:`int<class_int>` **get_current_drive** **(** **)**
+
+Returns the currently opened directory's drive index. See :ref:`get_drive_name<class_DirAccess_method_get_drive_name>` to convert returned index to the name of the drive.
+
+----
+
+.. _class_DirAccess_method_get_directories:
+
+- :ref:`PackedStringArray<class_PackedStringArray>` **get_directories** **(** **)**
+
+Returns a :ref:`PackedStringArray<class_PackedStringArray>` containing filenames of the directory contents, excluding files. The array is sorted alphabetically.
+
+Affected by :ref:`include_hidden<class_DirAccess_property_include_hidden>` and :ref:`include_navigational<class_DirAccess_property_include_navigational>`.
+
+----
+
+.. _class_DirAccess_method_get_directories_at:
+
+- :ref:`PackedStringArray<class_PackedStringArray>` **get_directories_at** **(** :ref:`String<class_String>` path **)** |static|
+
+Returns a :ref:`PackedStringArray<class_PackedStringArray>` containing filenames of the directory contents, excluding files, at the given ``path``. The array is sorted alphabetically.
+
+Use :ref:`get_directories<class_DirAccess_method_get_directories>` if you want more control of what gets included.
+
+----
+
+.. _class_DirAccess_method_get_drive_count:
+
+- :ref:`int<class_int>` **get_drive_count** **(** **)** |static|
+
+On Windows, returns the number of drives (partitions) mounted on the current filesystem.
+
+On macOS, returns the number of mounted volumes.
+
+On Linux, returns the number of mounted volumes and GTK 3 bookmarks.
+
+On other platforms, the method returns 0.
+
+----
+
+.. _class_DirAccess_method_get_drive_name:
+
+- :ref:`String<class_String>` **get_drive_name** **(** :ref:`int<class_int>` idx **)** |static|
+
+On Windows, returns the name of the drive (partition) passed as an argument (e.g. ``C:``).
+
+On macOS, returns the path to the mounted volume passed as an argument.
+
+On Linux, returns the path to the mounted volume or GTK 3 bookmark passed as an argument.
+
+On other platforms, or if the requested drive does not exist, the method returns an empty String.
+
+----
+
+.. _class_DirAccess_method_get_files:
+
+- :ref:`PackedStringArray<class_PackedStringArray>` **get_files** **(** **)**
+
+Returns a :ref:`PackedStringArray<class_PackedStringArray>` containing filenames of the directory contents, excluding directories. The array is sorted alphabetically.
+
+Affected by :ref:`include_hidden<class_DirAccess_property_include_hidden>`.
+
+----
+
+.. _class_DirAccess_method_get_files_at:
+
+- :ref:`PackedStringArray<class_PackedStringArray>` **get_files_at** **(** :ref:`String<class_String>` path **)** |static|
+
+Returns a :ref:`PackedStringArray<class_PackedStringArray>` containing filenames of the directory contents, excluding directories, at the given ``path``. The array is sorted alphabetically.
+
+Use :ref:`get_files<class_DirAccess_method_get_files>` if you want more control of what gets included.
+
+----
+
+.. _class_DirAccess_method_get_next:
+
+- :ref:`String<class_String>` **get_next** **(** **)**
+
+Returns the next element (file or directory) in the current directory.
+
+The name of the file or directory is returned (and not its full path). Once the stream has been fully processed, the method returns an empty :ref:`String<class_String>` and closes the stream automatically (i.e. :ref:`list_dir_end<class_DirAccess_method_list_dir_end>` would not be mandatory in such a case).
+
+----
+
+.. _class_DirAccess_method_get_open_error:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **get_open_error** **(** **)** |static|
+
+Returns the result of the last :ref:`open<class_DirAccess_method_open>` call in the current thread.
+
+----
+
+.. _class_DirAccess_method_get_space_left:
+
+- :ref:`int<class_int>` **get_space_left** **(** **)**
+
+Returns the available space on the current directory's disk, in bytes. Returns ``0`` if the platform-specific method to query the available space fails.
+
+----
+
+.. _class_DirAccess_method_list_dir_begin:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **list_dir_begin** **(** **)**
+
+Initializes the stream used to list all files and directories using the :ref:`get_next<class_DirAccess_method_get_next>` function, closing the currently opened stream if needed. Once the stream has been processed, it should typically be closed with :ref:`list_dir_end<class_DirAccess_method_list_dir_end>`.
+
+Affected by :ref:`include_hidden<class_DirAccess_property_include_hidden>` and :ref:`include_navigational<class_DirAccess_property_include_navigational>`.
+
+\ **Note:** The order of files and directories returned by this method is not deterministic, and can vary between operating systems. If you want a list of all files or folders sorted alphabetically, use :ref:`get_files<class_DirAccess_method_get_files>` or :ref:`get_directories<class_DirAccess_method_get_directories>`.
+
+----
+
+.. _class_DirAccess_method_list_dir_end:
+
+- void **list_dir_end** **(** **)**
+
+Closes the current stream opened with :ref:`list_dir_begin<class_DirAccess_method_list_dir_begin>` (whether it has been fully processed with :ref:`get_next<class_DirAccess_method_get_next>` does not matter).
+
+----
+
+.. _class_DirAccess_method_make_dir:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **make_dir** **(** :ref:`String<class_String>` path **)**
+
+Creates a directory. The argument can be relative to the current directory, or an absolute path. The target directory should be placed in an already existing directory (to create the full path recursively, see :ref:`make_dir_recursive<class_DirAccess_method_make_dir_recursive>`).
+
+Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
+
+----
+
+.. _class_DirAccess_method_make_dir_absolute:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **make_dir_absolute** **(** :ref:`String<class_String>` path **)** |static|
+
+Static version of :ref:`make_dir<class_DirAccess_method_make_dir>`. Supports only absolute paths.
+
+----
+
+.. _class_DirAccess_method_make_dir_recursive:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **make_dir_recursive** **(** :ref:`String<class_String>` path **)**
+
+Creates a target directory and all necessary intermediate directories in its path, by calling :ref:`make_dir<class_DirAccess_method_make_dir>` recursively. The argument can be relative to the current directory, or an absolute path.
+
+Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
+
+----
+
+.. _class_DirAccess_method_make_dir_recursive_absolute:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **make_dir_recursive_absolute** **(** :ref:`String<class_String>` path **)** |static|
+
+Static version of :ref:`make_dir_recursive<class_DirAccess_method_make_dir_recursive>`. Supports only absolute paths.
+
+----
+
+.. _class_DirAccess_method_open:
+
+- :ref:`DirAccess<class_DirAccess>` **open** **(** :ref:`String<class_String>` path **)** |static|
+
+Creates a new ``DirAccess`` object and opens an existing directory of the filesystem. The ``path`` argument can be within the project tree (``res://folder``), the user directory (``user://folder``) or an absolute path of the user filesystem (e.g. ``/tmp/folder`` or ``C:\tmp\folder``).
+
+Returns ``null`` if opening the directory failed. You can use :ref:`get_open_error<class_DirAccess_method_get_open_error>` to check the error that occurred.
+
+----
+
+.. _class_DirAccess_method_remove:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **remove** **(** :ref:`String<class_String>` path **)**
+
+Permanently deletes the target file or an empty directory. The argument can be relative to the current directory, or an absolute path. If the target directory is not empty, the operation will fail.
+
+If you don't want to delete the file/directory permanently, use :ref:`OS.move_to_trash<class_OS_method_move_to_trash>` instead.
+
+Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
+
+----
+
+.. _class_DirAccess_method_remove_absolute:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **remove_absolute** **(** :ref:`String<class_String>` path **)** |static|
+
+Static version of :ref:`remove<class_DirAccess_method_remove>`. Supports only absolute paths.
+
+----
+
+.. _class_DirAccess_method_rename:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **rename** **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)**
+
+Renames (move) the ``from`` file or directory to the ``to`` destination. Both arguments should be paths to files or directories, either relative or absolute. If the destination file or directory exists and is not access-protected, it will be overwritten.
+
+Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
+
+----
+
+.. _class_DirAccess_method_rename_absolute:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **rename_absolute** **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)** |static|
+
+Static version of :ref:`rename<class_DirAccess_method_rename>`. Supports only absolute paths.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 0 - 381
classes/class_directory.rst

@@ -1,381 +0,0 @@
-:github_url: hide
-
-.. DO NOT EDIT THIS FILE!!!
-.. Generated automatically from Godot engine sources.
-.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
-.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/Directory.xml.
-
-.. _class_Directory:
-
-Directory
-=========
-
-**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
-
-Type used to handle the filesystem.
-
-Description
------------
-
-Directory type. It is used to manage directories and their content (not restricted to the project folder).
-
-When creating a new ``Directory``, it must be explicitly opened using :ref:`open<class_Directory_method_open>` before most methods can be used. However, :ref:`file_exists<class_Directory_method_file_exists>` and :ref:`dir_exists<class_Directory_method_dir_exists>` can be used without opening a directory. If so, they use a path relative to ``res://``.
-
-\ **Note:** Many resources types are imported (e.g. textures or sound files), and their source asset will not be included in the exported game, as only the imported version is used. Use :ref:`ResourceLoader<class_ResourceLoader>` to access imported resources.
-
-Here is an example on how to iterate through the files of a directory:
-
-
-.. tabs::
-
- .. code-tab:: gdscript
-
-    func dir_contents(path):
-        var dir = Directory.new()
-        if dir.open(path) == OK:
-            dir.list_dir_begin()
-            var file_name = dir.get_next()
-            while file_name != "":
-                if dir.current_is_dir():
-                    print("Found directory: " + file_name)
-                else:
-                    print("Found file: " + file_name)
-                file_name = dir.get_next()
-        else:
-            print("An error occurred when trying to access the path.")
-
- .. code-tab:: csharp
-
-    public void DirContents(string path)
-    {
-        var dir = new Directory();
-        if (dir.Open(path) == Error.Ok)
-        {
-            dir.ListDirBegin();
-            string fileName = dir.GetNext();
-            while (fileName != "")
-            {
-                if (dir.CurrentIsDir())
-                {
-                    GD.Print("Found directory: " + fileName);
-                }
-                else
-                {
-                    GD.Print("Found file: " + fileName);
-                }
-                fileName = dir.GetNext();
-            }
-        }
-        else
-        {
-            GD.Print("An error occurred when trying to access the path.");
-        }
-    }
-
-
-
-Tutorials
----------
-
-- :doc:`File system <../tutorials/scripting/filesystem>`
-
-Properties
-----------
-
-+-------------------------+----------------------------------------------------------------------------+-----------+
-| :ref:`bool<class_bool>` | :ref:`include_hidden<class_Directory_property_include_hidden>`             | ``false`` |
-+-------------------------+----------------------------------------------------------------------------+-----------+
-| :ref:`bool<class_bool>` | :ref:`include_navigational<class_Directory_property_include_navigational>` | ``false`` |
-+-------------------------+----------------------------------------------------------------------------+-----------+
-
-Methods
--------
-
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`change_dir<class_Directory_method_change_dir>` **(** :ref:`String<class_String>` todir **)**                        |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`copy<class_Directory_method_copy>` **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)**     |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`current_is_dir<class_Directory_method_current_is_dir>` **(** **)** |const|                                          |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`dir_exists<class_Directory_method_dir_exists>` **(** :ref:`String<class_String>` path **)**                         |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`file_exists<class_Directory_method_file_exists>` **(** :ref:`String<class_String>` path **)**                       |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_current_dir<class_Directory_method_get_current_dir>` **(** **)**                                                |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_current_drive<class_Directory_method_get_current_drive>` **(** **)**                                            |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_directories<class_Directory_method_get_directories>` **(** **)**                                                |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_drive<class_Directory_method_get_drive>` **(** :ref:`int<class_int>` idx **)**                                  |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_drive_count<class_Directory_method_get_drive_count>` **(** **)**                                                |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_files<class_Directory_method_get_files>` **(** **)**                                                            |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_next<class_Directory_method_get_next>` **(** **)**                                                              |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_space_left<class_Directory_method_get_space_left>` **(** **)**                                                  |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`list_dir_begin<class_Directory_method_list_dir_begin>` **(** **)**                                                  |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`list_dir_end<class_Directory_method_list_dir_end>` **(** **)**                                                      |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`make_dir<class_Directory_method_make_dir>` **(** :ref:`String<class_String>` path **)**                             |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`make_dir_recursive<class_Directory_method_make_dir_recursive>` **(** :ref:`String<class_String>` path **)**         |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`open<class_Directory_method_open>` **(** :ref:`String<class_String>` path **)**                                     |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`remove<class_Directory_method_remove>` **(** :ref:`String<class_String>` path **)**                                 |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`rename<class_Directory_method_rename>` **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)** |
-+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
-
-Property Descriptions
----------------------
-
-.. _class_Directory_property_include_hidden:
-
-- :ref:`bool<class_bool>` **include_hidden**
-
-+-----------+---------------------------+
-| *Default* | ``false``                 |
-+-----------+---------------------------+
-| *Setter*  | set_include_hidden(value) |
-+-----------+---------------------------+
-| *Getter*  | get_include_hidden()      |
-+-----------+---------------------------+
-
-If ``true``, hidden files are included when the navigating directory.
-
-Affects :ref:`list_dir_begin<class_Directory_method_list_dir_begin>`, :ref:`get_directories<class_Directory_method_get_directories>` and :ref:`get_files<class_Directory_method_get_files>`.
-
-----
-
-.. _class_Directory_property_include_navigational:
-
-- :ref:`bool<class_bool>` **include_navigational**
-
-+-----------+---------------------------------+
-| *Default* | ``false``                       |
-+-----------+---------------------------------+
-| *Setter*  | set_include_navigational(value) |
-+-----------+---------------------------------+
-| *Getter*  | get_include_navigational()      |
-+-----------+---------------------------------+
-
-If ``true``, ``.`` and ``..`` are included when navigating the directory.
-
-Affects :ref:`list_dir_begin<class_Directory_method_list_dir_begin>` and :ref:`get_directories<class_Directory_method_get_directories>`.
-
-Method Descriptions
--------------------
-
-.. _class_Directory_method_change_dir:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **change_dir** **(** :ref:`String<class_String>` todir **)**
-
-Changes the currently opened directory to the one passed as an argument. The argument can be relative to the current directory (e.g. ``newdir`` or ``../newdir``), or an absolute path (e.g. ``/tmp/newdir`` or ``res://somedir/newdir``).
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-----
-
-.. _class_Directory_method_copy:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **copy** **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)**
-
-Copies the ``from`` file to the ``to`` destination. Both arguments should be paths to files, either relative or absolute. If the destination file exists and is not access-protected, it will be overwritten.
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-----
-
-.. _class_Directory_method_current_is_dir:
-
-- :ref:`bool<class_bool>` **current_is_dir** **(** **)** |const|
-
-Returns whether the current item processed with the last :ref:`get_next<class_Directory_method_get_next>` call is a directory (``.`` and ``..`` are considered directories).
-
-----
-
-.. _class_Directory_method_dir_exists:
-
-- :ref:`bool<class_bool>` **dir_exists** **(** :ref:`String<class_String>` path **)**
-
-Returns whether the target directory exists. The argument can be relative to the current directory, or an absolute path.
-
-If the ``Directory`` is not open, the path is relative to ``res://``.
-
-----
-
-.. _class_Directory_method_file_exists:
-
-- :ref:`bool<class_bool>` **file_exists** **(** :ref:`String<class_String>` path **)**
-
-Returns whether the target file exists. The argument can be relative to the current directory, or an absolute path.
-
-If the ``Directory`` is not open, the path is relative to ``res://``.
-
-----
-
-.. _class_Directory_method_get_current_dir:
-
-- :ref:`String<class_String>` **get_current_dir** **(** **)**
-
-Returns the absolute path to the currently opened directory (e.g. ``res://folder`` or ``C:\tmp\folder``).
-
-----
-
-.. _class_Directory_method_get_current_drive:
-
-- :ref:`int<class_int>` **get_current_drive** **(** **)**
-
-Returns the currently opened directory's drive index. See :ref:`get_drive<class_Directory_method_get_drive>` to convert returned index to the name of the drive.
-
-----
-
-.. _class_Directory_method_get_directories:
-
-- :ref:`PackedStringArray<class_PackedStringArray>` **get_directories** **(** **)**
-
-Returns a :ref:`PackedStringArray<class_PackedStringArray>` containing filenames of the directory contents, excluding files. The array is sorted alphabetically.
-
-Affected by :ref:`include_hidden<class_Directory_property_include_hidden>` and :ref:`include_navigational<class_Directory_property_include_navigational>`.
-
-----
-
-.. _class_Directory_method_get_drive:
-
-- :ref:`String<class_String>` **get_drive** **(** :ref:`int<class_int>` idx **)**
-
-On Windows, returns the name of the drive (partition) passed as an argument (e.g. ``C:``).
-
-On macOS, returns the path to the mounted volume passed as an argument.
-
-On Linux, returns the path to the mounted volume or GTK 3 bookmark passed as an argument.
-
-On other platforms, or if the requested drive does not exist, the method returns an empty String.
-
-----
-
-.. _class_Directory_method_get_drive_count:
-
-- :ref:`int<class_int>` **get_drive_count** **(** **)**
-
-On Windows, returns the number of drives (partitions) mounted on the current filesystem.
-
-On macOS, returns the number of mounted volumes.
-
-On Linux, returns the number of mounted volumes and GTK 3 bookmarks.
-
-On other platforms, the method returns 0.
-
-----
-
-.. _class_Directory_method_get_files:
-
-- :ref:`PackedStringArray<class_PackedStringArray>` **get_files** **(** **)**
-
-Returns a :ref:`PackedStringArray<class_PackedStringArray>` containing filenames of the directory contents, excluding directories. The array is sorted alphabetically.
-
-Affected by :ref:`include_hidden<class_Directory_property_include_hidden>`.
-
-----
-
-.. _class_Directory_method_get_next:
-
-- :ref:`String<class_String>` **get_next** **(** **)**
-
-Returns the next element (file or directory) in the current directory (including ``.`` and ``..``, unless ``skip_navigational`` was given to :ref:`list_dir_begin<class_Directory_method_list_dir_begin>`).
-
-The name of the file or directory is returned (and not its full path). Once the stream has been fully processed, the method returns an empty String and closes the stream automatically (i.e. :ref:`list_dir_end<class_Directory_method_list_dir_end>` would not be mandatory in such a case).
-
-----
-
-.. _class_Directory_method_get_space_left:
-
-- :ref:`int<class_int>` **get_space_left** **(** **)**
-
-On UNIX desktop systems, returns the available space on the current directory's disk. On other platforms, this information is not available and the method returns 0 or -1.
-
-----
-
-.. _class_Directory_method_list_dir_begin:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **list_dir_begin** **(** **)**
-
-Initializes the stream used to list all files and directories using the :ref:`get_next<class_Directory_method_get_next>` function, closing the currently opened stream if needed. Once the stream has been processed, it should typically be closed with :ref:`list_dir_end<class_Directory_method_list_dir_end>`.
-
-Affected by :ref:`include_hidden<class_Directory_property_include_hidden>` and :ref:`include_navigational<class_Directory_property_include_navigational>`.
-
-\ **Note:** The order of files and directories returned by this method is not deterministic, and can vary between operating systems. If you want a list of all files or folders sorted alphabetically, use :ref:`get_files<class_Directory_method_get_files>` or :ref:`get_directories<class_Directory_method_get_directories>`.
-
-----
-
-.. _class_Directory_method_list_dir_end:
-
-- void **list_dir_end** **(** **)**
-
-Closes the current stream opened with :ref:`list_dir_begin<class_Directory_method_list_dir_begin>` (whether it has been fully processed with :ref:`get_next<class_Directory_method_get_next>` does not matter).
-
-----
-
-.. _class_Directory_method_make_dir:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **make_dir** **(** :ref:`String<class_String>` path **)**
-
-Creates a directory. The argument can be relative to the current directory, or an absolute path. The target directory should be placed in an already existing directory (to create the full path recursively, see :ref:`make_dir_recursive<class_Directory_method_make_dir_recursive>`).
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-----
-
-.. _class_Directory_method_make_dir_recursive:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **make_dir_recursive** **(** :ref:`String<class_String>` path **)**
-
-Creates a target directory and all necessary intermediate directories in its path, by calling :ref:`make_dir<class_Directory_method_make_dir>` recursively. The argument can be relative to the current directory, or an absolute path.
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-----
-
-.. _class_Directory_method_open:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **open** **(** :ref:`String<class_String>` path **)**
-
-Opens an existing directory of the filesystem. The ``path`` argument can be within the project tree (``res://folder``), the user directory (``user://folder``) or an absolute path of the user filesystem (e.g. ``/tmp/folder`` or ``C:\tmp\folder``).
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-----
-
-.. _class_Directory_method_remove:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **remove** **(** :ref:`String<class_String>` path **)**
-
-Permanently deletes the target file or an empty directory. The argument can be relative to the current directory, or an absolute path. If the target directory is not empty, the operation will fail.
-
-If you don't want to delete the file/directory permanently, use :ref:`OS.move_to_trash<class_OS_method_move_to_trash>` instead.
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-----
-
-.. _class_Directory_method_rename:
-
-- :ref:`Error<enum_@GlobalScope_Error>` **rename** **(** :ref:`String<class_String>` from, :ref:`String<class_String>` to **)**
-
-Renames (move) the ``from`` file or directory to the ``to`` destination. Both arguments should be paths to files or directories, either relative or absolute. If the destination file or directory exists and is not access-protected, it will be overwritten.
-
-Returns one of the :ref:`Error<enum_@GlobalScope_Error>` code constants (``OK`` on success).
-
-.. |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.)`
-.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
-.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
-.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 57 - 23
classes/class_displayserver.rst

@@ -320,6 +320,8 @@ Methods
 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                           | :ref:`window_set_vsync_mode<class_DisplayServer_method_window_set_vsync_mode>` **(** :ref:`VSyncMode<enum_DisplayServer_VSyncMode>` vsync_mode, :ref:`int<class_int>` window_id=0 **)**                                                                                                                                                                                                                                                                                        |
 | void                                                           | :ref:`window_set_vsync_mode<class_DisplayServer_method_window_set_vsync_mode>` **(** :ref:`VSyncMode<enum_DisplayServer_VSyncMode>` vsync_mode, :ref:`int<class_int>` window_id=0 **)**                                                                                                                                                                                                                                                                                        |
 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                           | :ref:`window_set_window_buttons_offset<class_DisplayServer_method_window_set_window_buttons_offset>` **(** :ref:`Vector2i<class_Vector2i>` offset, :ref:`int<class_int>` window_id=0 **)**                                                                                                                                                                                                                                                                                     |
++----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                           | :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>` **(** :ref:`Callable<class_Callable>` callback, :ref:`int<class_int>` window_id=0 **)**                                                                                                                                                                                                                                                                                   |
 | void                                                           | :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>` **(** :ref:`Callable<class_Callable>` callback, :ref:`int<class_int>` window_id=0 **)**                                                                                                                                                                                                                                                                                   |
 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
@@ -606,21 +608,21 @@ enum **CursorShape**:
 
 
 enum **WindowMode**:
 enum **WindowMode**:
 
 
-- **WINDOW_MODE_WINDOWED** = **0**
+- **WINDOW_MODE_WINDOWED** = **0** --- Windowed mode, i.e. :ref:`Window<class_Window>` doesn't occupy the whole screen (unless set to the size of the screen).
 
 
-- **WINDOW_MODE_MINIMIZED** = **1**
+- **WINDOW_MODE_MINIMIZED** = **1** --- Minimized window mode, i.e. :ref:`Window<class_Window>` is not visible and available on window manager's window list. Normally happens when the minimize button is pressed.
 
 
-- **WINDOW_MODE_MAXIMIZED** = **2**
+- **WINDOW_MODE_MAXIMIZED** = **2** --- Maximized window mode, i.e. :ref:`Window<class_Window>` will occupy whole screen area except task bar and still display its borders. Normally happens when the minimize button is pressed.
 
 
-- **WINDOW_MODE_FULLSCREEN** = **3** --- Fullscreen window mode. Note that this is not *exclusive* fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
+- **WINDOW_MODE_FULLSCREEN** = **3** --- Full screen window mode. Note that this is not *exclusive* full screen. On Windows and Linux, a borderless window is used to emulate full screen. On macOS, a new desktop is used to display the running project.
 
 
-Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports :doc:`multiple resolutions <../tutorials/rendering/multiple_resolutions>` when enabling fullscreen mode.
+Regardless of the platform, enabling full screen will change the window size to match the monitor's size. Therefore, make sure your project supports :doc:`multiple resolutions <../tutorials/rendering/multiple_resolutions>` when enabling full screen mode.
 
 
-- **WINDOW_MODE_EXCLUSIVE_FULLSCREEN** = **4** --- Exclusive fullscreen window mode. This mode is implemented on Windows only. On other platforms, it is equivalent to :ref:`WINDOW_MODE_FULLSCREEN<class_DisplayServer_constant_WINDOW_MODE_FULLSCREEN>`.
+- **WINDOW_MODE_EXCLUSIVE_FULLSCREEN** = **4** --- Exclusive full screen window mode. This mode is implemented on Windows only. On other platforms, it is equivalent to :ref:`WINDOW_MODE_FULLSCREEN<class_DisplayServer_constant_WINDOW_MODE_FULLSCREEN>`.
 
 
-Only one window in exclusive fullscreen mode can be visible on a given screen at a time. If multiple windows are in exclusive fullscreen mode for the same screen, the last one being set to this mode takes precedence.
+Only one window in exclusive full screen mode can be visible on a given screen at a time. If multiple windows are in exclusive full screen mode for the same screen, the last one being set to this mode takes precedence.
 
 
-Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports :doc:`multiple resolutions <../tutorials/rendering/multiple_resolutions>` when enabling fullscreen mode.
+Regardless of the platform, enabling full screen will change the window size to match the monitor's size. Therefore, make sure your project supports :doc:`multiple resolutions <../tutorials/rendering/multiple_resolutions>` when enabling full screen mode.
 
 
 ----
 ----
 
 
@@ -644,23 +646,31 @@ Regardless of the platform, enabling fullscreen will change the window size to m
 
 
 enum **WindowFlags**:
 enum **WindowFlags**:
 
 
-- **WINDOW_FLAG_RESIZE_DISABLED** = **0** --- Window can't be resizing by dragging its resize grip. It's still possible to resize the window using :ref:`window_set_size<class_DisplayServer_method_window_set_size>`. This flag is ignored for full screen windows.
+- **WINDOW_FLAG_RESIZE_DISABLED** = **0** --- The window can't be resizing by dragging its resize grip. It's still possible to resize the window using :ref:`window_set_size<class_DisplayServer_method_window_set_size>`. This flag is ignored for full screen windows.
+
+- **WINDOW_FLAG_BORDERLESS** = **1** --- The window do not have native title bar and other decorations. This flag is ignored for full-screen windows.
+
+- **WINDOW_FLAG_ALWAYS_ON_TOP** = **2** --- The window is floating on top of all other windows. This flag is ignored for full-screen windows.
 
 
-- **WINDOW_FLAG_BORDERLESS** = **1** --- Window do not have native title bar and other decorations. This flag is ignored for full-screen windows.
+- **WINDOW_FLAG_TRANSPARENT** = **3** --- The window background can be transparent.
 
 
-- **WINDOW_FLAG_ALWAYS_ON_TOP** = **2** --- Window is floating above other regular windows. This flag is ignored for full-screen windows.
+\ **Note:** This flag has no effect if :ref:`ProjectSettings.display/window/per_pixel_transparency/allowed<class_ProjectSettings_property_display/window/per_pixel_transparency/allowed>` is set to ``false``.
 
 
-- **WINDOW_FLAG_TRANSPARENT** = **3** --- Window is will be destroyed with its transient parent and displayed on top of non-exclusive full-screen parent window. Transient windows can't enter full-screen mode.
+\ **Note:** Transparency support is implemented on Linux, macOS and Windows, but availability might vary depending on GPU driver, display manager, and compositor capabilities.
 
 
-- **WINDOW_FLAG_NO_FOCUS** = **4** --- Window can't be focused. No-focus window will ignore all input, except mouse clicks.
+- **WINDOW_FLAG_NO_FOCUS** = **4** --- The window can't be focused. No-focus window will ignore all input, except mouse clicks.
 
 
-- **WINDOW_FLAG_POPUP** = **5** --- Window is part of menu or :ref:`OptionButton<class_OptionButton>` dropdown. This flag can't be changed when window is visible. An active popup window will exclusively receive all input, without stealing focus from its parent. Popup windows are automatically closed when uses click outside it, or when an application is switched. Popup window must have :ref:`WINDOW_FLAG_TRANSPARENT<class_DisplayServer_constant_WINDOW_FLAG_TRANSPARENT>` set.
+- **WINDOW_FLAG_POPUP** = **5** --- Window is part of menu or :ref:`OptionButton<class_OptionButton>` dropdown. This flag can't be changed when the window is visible. An active popup window will exclusively receive all input, without stealing focus from its parent. Popup windows are automatically closed when uses click outside it, or when an application is switched. Popup window must have ``transient parent`` set (see :ref:`window_set_transient<class_DisplayServer_method_window_set_transient>`).
 
 
 - **WINDOW_FLAG_EXTEND_TO_TITLE** = **6** --- Window content is expanded to the full size of the window. Unlike borderless window, the frame is left intact and can be used to resize the window, title bar is transparent, but have minimize/maximize/close buttons.
 - **WINDOW_FLAG_EXTEND_TO_TITLE** = **6** --- Window content is expanded to the full size of the window. Unlike borderless window, the frame is left intact and can be used to resize the window, title bar is transparent, but have minimize/maximize/close buttons.
 
 
+Use :ref:`window_set_window_buttons_offset<class_DisplayServer_method_window_set_window_buttons_offset>` to adjust minimize/maximize/close buttons offset.
+
+Use :ref:`window_get_safe_title_margins<class_DisplayServer_method_window_get_safe_title_margins>` to determine area under the title bar that is not covered by decorations.
+
 \ **Note:** This flag is implemented on macOS.
 \ **Note:** This flag is implemented on macOS.
 
 
-- **WINDOW_FLAG_MAX** = **7**
+- **WINDOW_FLAG_MAX** = **7** --- Max value of the :ref:`WindowFlags<enum_DisplayServer_WindowFlags>`.
 
 
 ----
 ----
 
 
@@ -680,21 +690,31 @@ enum **WindowFlags**:
 
 
 .. _class_DisplayServer_constant_WINDOW_EVENT_DPI_CHANGE:
 .. _class_DisplayServer_constant_WINDOW_EVENT_DPI_CHANGE:
 
 
+.. _class_DisplayServer_constant_WINDOW_EVENT_TITLEBAR_CHANGE:
+
 enum **WindowEvent**:
 enum **WindowEvent**:
 
 
-- **WINDOW_EVENT_MOUSE_ENTER** = **0**
+- **WINDOW_EVENT_MOUSE_ENTER** = **0** --- Sent when the mouse pointer enters the window, see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
 
 
-- **WINDOW_EVENT_MOUSE_EXIT** = **1**
+- **WINDOW_EVENT_MOUSE_EXIT** = **1** --- Sent when the mouse pointer exits the window, see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
 
 
-- **WINDOW_EVENT_FOCUS_IN** = **2**
+- **WINDOW_EVENT_FOCUS_IN** = **2** --- Sent when the window grabs focus, see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
 
 
-- **WINDOW_EVENT_FOCUS_OUT** = **3**
+- **WINDOW_EVENT_FOCUS_OUT** = **3** --- Sent when the window loses focus, see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
 
 
-- **WINDOW_EVENT_CLOSE_REQUEST** = **4**
+- **WINDOW_EVENT_CLOSE_REQUEST** = **4** --- Sent when the user has attempted to close the window (e.g. close button is pressed), see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
 
 
-- **WINDOW_EVENT_GO_BACK_REQUEST** = **5**
+- **WINDOW_EVENT_GO_BACK_REQUEST** = **5** --- Sent when the device "Back" button is pressed, see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
 
 
-- **WINDOW_EVENT_DPI_CHANGE** = **6**
+\ **Note:** This event is implemented on Android.
+
+- **WINDOW_EVENT_DPI_CHANGE** = **6** --- Sent when the window is moved to the display with different DPI, or display DPI is changed, see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
+
+\ **Note:** This flag is implemented on macOS.
+
+- **WINDOW_EVENT_TITLEBAR_CHANGE** = **7** --- Sent when the window title bar decoration is changed (e.g. :ref:`WINDOW_FLAG_EXTEND_TO_TITLE<class_DisplayServer_constant_WINDOW_FLAG_EXTEND_TO_TITLE>` is set or window entered/exited full screen mode), see :ref:`window_set_window_event_callback<class_DisplayServer_method_window_set_window_event_callback>`.
+
+\ **Note:** This flag is implemented on macOS.
 
 
 ----
 ----
 
 
@@ -2169,7 +2189,7 @@ Sets the minimum size for the given window to ``min_size`` (in pixels).
 
 
 Sets window mode for the given window to ``mode``. See :ref:`WindowMode<enum_DisplayServer_WindowMode>` for possible values and how each mode behaves.
 Sets window mode for the given window to ``mode``. See :ref:`WindowMode<enum_DisplayServer_WindowMode>` for possible values and how each mode behaves.
 
 
-\ **Note:** Setting the window to fullscreen forcibly sets the borderless flag to ``true``, so make sure to set it back to ``false`` when not wanted.
+\ **Note:** Setting the window to full screen forcibly sets the borderless flag to ``true``, so make sure to set it back to ``false`` when not wanted.
 
 
 ----
 ----
 
 
@@ -2256,6 +2276,10 @@ Sets the title of the given window to ``title``.
 
 
 - void **window_set_transient** **(** :ref:`int<class_int>` window_id, :ref:`int<class_int>` parent_window_id **)**
 - void **window_set_transient** **(** :ref:`int<class_int>` window_id, :ref:`int<class_int>` parent_window_id **)**
 
 
+Sets window transient parent. Transient window is will be destroyed with its transient parent and will return focus to their parent when closed. The transient window is displayed on top of a non-exclusive full-screen parent window. Transient windows can't enter full-screen mode.
+
+Note that behavior might be different depending on the platform.
+
 ----
 ----
 
 
 .. _class_DisplayServer_method_window_set_vsync_mode:
 .. _class_DisplayServer_method_window_set_vsync_mode:
@@ -2270,6 +2294,16 @@ Depending on the platform and used renderer, the engine will fall back to :ref:`
 
 
 ----
 ----
 
 
+.. _class_DisplayServer_method_window_set_window_buttons_offset:
+
+- void **window_set_window_buttons_offset** **(** :ref:`Vector2i<class_Vector2i>` offset, :ref:`int<class_int>` window_id=0 **)**
+
+When :ref:`WINDOW_FLAG_EXTEND_TO_TITLE<class_DisplayServer_constant_WINDOW_FLAG_EXTEND_TO_TITLE>` flag is set, set offset to the center of the first titlebar button.
+
+\ **Note:** This flag is implemented on macOS.
+
+----
+
 .. _class_DisplayServer_method_window_set_window_event_callback:
 .. _class_DisplayServer_method_window_set_window_event_callback:
 
 
 - void **window_set_window_event_callback** **(** :ref:`Callable<class_Callable>` callback, :ref:`int<class_int>` window_id=0 **)**
 - void **window_set_window_event_callback** **(** :ref:`Callable<class_Callable>` callback, :ref:`int<class_int>` window_id=0 **)**

+ 3 - 3
classes/class_editorimportplugin.rst

@@ -28,7 +28,7 @@ Below is an example EditorImportPlugin that imports a :ref:`Mesh<class_Mesh>` fr
 
 
  .. code-tab:: gdscript
  .. code-tab:: gdscript
 
 
-    tool
+    @tool
     extends EditorImportPlugin
     extends EditorImportPlugin
     
     
     func _get_importer_name():
     func _get_importer_name():
@@ -63,7 +63,7 @@ Below is an example EditorImportPlugin that imports a :ref:`Mesh<class_Mesh>` fr
         # Fill the Mesh with data read in "file", left as an exercise to the reader.
         # Fill the Mesh with data read in "file", left as an exercise to the reader.
     
     
         var filename = save_path + "." + _get_save_extension()
         var filename = save_path + "." + _get_save_extension()
-        return ResourceSaver.save(filename, mesh)
+        return ResourceSaver.save(mesh, filename)
 
 
  .. code-tab:: csharp
  .. code-tab:: csharp
 
 
@@ -123,7 +123,7 @@ Below is an example EditorImportPlugin that imports a :ref:`Mesh<class_Mesh>` fr
             var mesh = new ArrayMesh();
             var mesh = new ArrayMesh();
             // Fill the Mesh with data read in "file", left as an exercise to the reader.
             // Fill the Mesh with data read in "file", left as an exercise to the reader.
             String filename = savePath + "." + GetSaveExtension();
             String filename = savePath + "." + GetSaveExtension();
-            return (int)ResourceSaver.Save(filename, mesh);
+            return (int)ResourceSaver.Save(mesh, filename);
         }
         }
     }
     }
 
 

+ 16 - 0
classes/class_editorinspector.rst

@@ -36,6 +36,13 @@ Properties
 | :ref:`ScrollMode<enum_ScrollContainer_ScrollMode>` | horizontal_scroll_mode | ``0`` (overrides :ref:`ScrollContainer<class_ScrollContainer_property_horizontal_scroll_mode>`) |
 | :ref:`ScrollMode<enum_ScrollContainer_ScrollMode>` | horizontal_scroll_mode | ``0`` (overrides :ref:`ScrollContainer<class_ScrollContainer_property_horizontal_scroll_mode>`) |
 +----------------------------------------------------+------------------------+-------------------------------------------------------------------------------------------------+
 +----------------------------------------------------+------------------------+-------------------------------------------------------------------------------------------------+
 
 
+Methods
+-------
+
++-----------------------------+----------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>` | :ref:`get_selected_path<class_EditorInspector_method_get_selected_path>` **(** **)** |const| |
++-----------------------------+----------------------------------------------------------------------------------------------+
+
 Signals
 Signals
 -------
 -------
 
 
@@ -111,6 +118,15 @@ Emitted when a resource is selected in the inspector.
 
 
 Emitted when a property that requires a restart to be applied is edited in the inspector. This is only used in the Project Settings and Editor Settings.
 Emitted when a property that requires a restart to be applied is edited in the inspector. This is only used in the Project Settings and Editor Settings.
 
 
+Method Descriptions
+-------------------
+
+.. _class_EditorInspector_method_get_selected_path:
+
+- :ref:`String<class_String>` **get_selected_path** **(** **)** |const|
+
+Gets the path of the currently selected property.
+
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 11 - 11
classes/class_editornode3dgizmo.rst

@@ -59,9 +59,9 @@ Methods
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                          | :ref:`clear<class_EditorNode3DGizmo_method_clear>` **(** **)**                                                                                                                                                                                                                                                          |
 | void                                                          | :ref:`clear<class_EditorNode3DGizmo_method_clear>` **(** **)**                                                                                                                                                                                                                                                          |
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` | :ref:`get_plugin<class_EditorNode3DGizmo_method_get_plugin>` **(** **)** |const|                                                                                                                                                                                                                                        |
+| :ref:`Node3D<class_Node3D>`                                   | :ref:`get_node_3d<class_EditorNode3DGizmo_method_get_node_3d>` **(** **)** |const|                                                                                                                                                                                                                                      |
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Node3D<class_Node3D>`                                   | :ref:`get_spatial_node<class_EditorNode3DGizmo_method_get_spatial_node>` **(** **)** |const|                                                                                                                                                                                                                            |
+| :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` | :ref:`get_plugin<class_EditorNode3DGizmo_method_get_plugin>` **(** **)** |const|                                                                                                                                                                                                                                        |
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`PackedInt32Array<class_PackedInt32Array>`               | :ref:`get_subgizmo_selection<class_EditorNode3DGizmo_method_get_subgizmo_selection>` **(** **)** |const|                                                                                                                                                                                                                |
 | :ref:`PackedInt32Array<class_PackedInt32Array>`               | :ref:`get_subgizmo_selection<class_EditorNode3DGizmo_method_get_subgizmo_selection>` **(** **)** |const|                                                                                                                                                                                                                |
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -69,7 +69,7 @@ Methods
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                          | :ref:`set_hidden<class_EditorNode3DGizmo_method_set_hidden>` **(** :ref:`bool<class_bool>` hidden **)**                                                                                                                                                                                                                 |
 | void                                                          | :ref:`set_hidden<class_EditorNode3DGizmo_method_set_hidden>` **(** :ref:`bool<class_bool>` hidden **)**                                                                                                                                                                                                                 |
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                          | :ref:`set_spatial_node<class_EditorNode3DGizmo_method_set_spatial_node>` **(** :ref:`Node<class_Node>` node **)**                                                                                                                                                                                                       |
+| void                                                          | :ref:`set_node_3d<class_EditorNode3DGizmo_method_set_node_3d>` **(** :ref:`Node<class_Node>` node **)**                                                                                                                                                                                                                 |
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Method Descriptions
 Method Descriptions
@@ -237,19 +237,19 @@ Removes everything in the gizmo including meshes, collisions and handles.
 
 
 ----
 ----
 
 
-.. _class_EditorNode3DGizmo_method_get_plugin:
+.. _class_EditorNode3DGizmo_method_get_node_3d:
 
 
-- :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` **get_plugin** **(** **)** |const|
+- :ref:`Node3D<class_Node3D>` **get_node_3d** **(** **)** |const|
 
 
-Returns the :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` that owns this gizmo. It's useful to retrieve materials using :ref:`EditorNode3DGizmoPlugin.get_material<class_EditorNode3DGizmoPlugin_method_get_material>`.
+Returns the :ref:`Node3D<class_Node3D>` node associated with this gizmo.
 
 
 ----
 ----
 
 
-.. _class_EditorNode3DGizmo_method_get_spatial_node:
+.. _class_EditorNode3DGizmo_method_get_plugin:
 
 
-- :ref:`Node3D<class_Node3D>` **get_spatial_node** **(** **)** |const|
+- :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` **get_plugin** **(** **)** |const|
 
 
-Returns the Node3D node associated with this gizmo.
+Returns the :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` that owns this gizmo. It's useful to retrieve materials using :ref:`EditorNode3DGizmoPlugin.get_material<class_EditorNode3DGizmoPlugin_method_get_material>`.
 
 
 ----
 ----
 
 
@@ -277,9 +277,9 @@ Sets the gizmo's hidden state. If ``true``, the gizmo will be hidden. If ``false
 
 
 ----
 ----
 
 
-.. _class_EditorNode3DGizmo_method_set_spatial_node:
+.. _class_EditorNode3DGizmo_method_set_node_3d:
 
 
-- void **set_spatial_node** **(** :ref:`Node<class_Node>` node **)**
+- void **set_node_3d** **(** :ref:`Node<class_Node>` node **)**
 
 
 Sets the reference :ref:`Node3D<class_Node3D>` node for the gizmo. ``node`` must inherit from :ref:`Node3D<class_Node3D>`.
 Sets the reference :ref:`Node3D<class_Node3D>` node for the gizmo. ``node`` must inherit from :ref:`Node3D<class_Node3D>`.
 
 

+ 2 - 2
classes/class_editornode3dgizmoplugin.rst

@@ -19,12 +19,12 @@ Description
 
 
 ``EditorNode3DGizmoPlugin`` allows you to define a new type of Gizmo. There are two main ways to do so: extending ``EditorNode3DGizmoPlugin`` for the simpler gizmos, or creating a new :ref:`EditorNode3DGizmo<class_EditorNode3DGizmo>` type. See the tutorial in the documentation for more info.
 ``EditorNode3DGizmoPlugin`` allows you to define a new type of Gizmo. There are two main ways to do so: extending ``EditorNode3DGizmoPlugin`` for the simpler gizmos, or creating a new :ref:`EditorNode3DGizmo<class_EditorNode3DGizmo>` type. See the tutorial in the documentation for more info.
 
 
-To use ``EditorNode3DGizmoPlugin``, register it using the :ref:`EditorPlugin.add_spatial_gizmo_plugin<class_EditorPlugin_method_add_spatial_gizmo_plugin>` method first.
+To use ``EditorNode3DGizmoPlugin``, register it using the :ref:`EditorPlugin.add_node_3d_gizmo_plugin<class_EditorPlugin_method_add_node_3d_gizmo_plugin>` method first.
 
 
 Tutorials
 Tutorials
 ---------
 ---------
 
 
-- :doc:`Spatial gizmo plugins <../tutorials/plugins/editor/spatial_gizmos>`
+- :doc:`Node3D gizmo plugins <../tutorials/plugins/editor/spatial_gizmos>`
 
 
 Methods
 Methods
 -------
 -------

+ 24 - 24
classes/class_editorplugin.rst

@@ -92,12 +92,12 @@ Methods
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`add_inspector_plugin<class_EditorPlugin_method_add_inspector_plugin>` **(** :ref:`EditorInspectorPlugin<class_EditorInspectorPlugin>` plugin **)**                                                                                              |
 | void                                                      | :ref:`add_inspector_plugin<class_EditorPlugin_method_add_inspector_plugin>` **(** :ref:`EditorInspectorPlugin<class_EditorInspectorPlugin>` plugin **)**                                                                                              |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                      | :ref:`add_node_3d_gizmo_plugin<class_EditorPlugin_method_add_node_3d_gizmo_plugin>` **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**                                                                                  |
++-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`add_scene_format_importer_plugin<class_EditorPlugin_method_add_scene_format_importer_plugin>` **(** :ref:`EditorSceneFormatImporter<class_EditorSceneFormatImporter>` scene_format_importer, :ref:`bool<class_bool>` first_priority=false **)** |
 | void                                                      | :ref:`add_scene_format_importer_plugin<class_EditorPlugin_method_add_scene_format_importer_plugin>` **(** :ref:`EditorSceneFormatImporter<class_EditorSceneFormatImporter>` scene_format_importer, :ref:`bool<class_bool>` first_priority=false **)** |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`add_scene_post_import_plugin<class_EditorPlugin_method_add_scene_post_import_plugin>` **(** :ref:`EditorScenePostImportPlugin<class_EditorScenePostImportPlugin>` scene_import_plugin, :ref:`bool<class_bool>` first_priority=false **)**       |
 | void                                                      | :ref:`add_scene_post_import_plugin<class_EditorPlugin_method_add_scene_post_import_plugin>` **(** :ref:`EditorScenePostImportPlugin<class_EditorScenePostImportPlugin>` scene_import_plugin, :ref:`bool<class_bool>` first_priority=false **)**       |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                      | :ref:`add_spatial_gizmo_plugin<class_EditorPlugin_method_add_spatial_gizmo_plugin>` **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**                                                                                  |
-+-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`add_tool_menu_item<class_EditorPlugin_method_add_tool_menu_item>` **(** :ref:`String<class_String>` name, :ref:`Callable<class_Callable>` callable **)**                                                                                        |
 | void                                                      | :ref:`add_tool_menu_item<class_EditorPlugin_method_add_tool_menu_item>` **(** :ref:`String<class_String>` name, :ref:`Callable<class_Callable>` callable **)**                                                                                        |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`add_tool_submenu_item<class_EditorPlugin_method_add_tool_submenu_item>` **(** :ref:`String<class_String>` name, :ref:`PopupMenu<class_PopupMenu>` submenu **)**                                                                                 |
 | void                                                      | :ref:`add_tool_submenu_item<class_EditorPlugin_method_add_tool_submenu_item>` **(** :ref:`String<class_String>` name, :ref:`PopupMenu<class_PopupMenu>` submenu **)**                                                                                 |
@@ -138,12 +138,12 @@ Methods
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`remove_inspector_plugin<class_EditorPlugin_method_remove_inspector_plugin>` **(** :ref:`EditorInspectorPlugin<class_EditorInspectorPlugin>` plugin **)**                                                                                        |
 | void                                                      | :ref:`remove_inspector_plugin<class_EditorPlugin_method_remove_inspector_plugin>` **(** :ref:`EditorInspectorPlugin<class_EditorInspectorPlugin>` plugin **)**                                                                                        |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                      | :ref:`remove_node_3d_gizmo_plugin<class_EditorPlugin_method_remove_node_3d_gizmo_plugin>` **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**                                                                            |
++-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`remove_scene_format_importer_plugin<class_EditorPlugin_method_remove_scene_format_importer_plugin>` **(** :ref:`EditorSceneFormatImporter<class_EditorSceneFormatImporter>` scene_format_importer **)**                                         |
 | void                                                      | :ref:`remove_scene_format_importer_plugin<class_EditorPlugin_method_remove_scene_format_importer_plugin>` **(** :ref:`EditorSceneFormatImporter<class_EditorSceneFormatImporter>` scene_format_importer **)**                                         |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`remove_scene_post_import_plugin<class_EditorPlugin_method_remove_scene_post_import_plugin>` **(** :ref:`EditorScenePostImportPlugin<class_EditorScenePostImportPlugin>` scene_import_plugin **)**                                               |
 | void                                                      | :ref:`remove_scene_post_import_plugin<class_EditorPlugin_method_remove_scene_post_import_plugin>` **(** :ref:`EditorScenePostImportPlugin<class_EditorScenePostImportPlugin>` scene_import_plugin **)**                                               |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                      | :ref:`remove_spatial_gizmo_plugin<class_EditorPlugin_method_remove_spatial_gizmo_plugin>` **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**                                                                            |
-+-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`remove_tool_menu_item<class_EditorPlugin_method_remove_tool_menu_item>` **(** :ref:`String<class_String>` name **)**                                                                                                                            |
 | void                                                      | :ref:`remove_tool_menu_item<class_EditorPlugin_method_remove_tool_menu_item>` **(** :ref:`String<class_String>` name **)**                                                                                                                            |
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                      | :ref:`remove_translation_parser_plugin<class_EditorPlugin_method_remove_translation_parser_plugin>` **(** :ref:`EditorTranslationParserPlugin<class_EditorTranslationParserPlugin>` parser **)**                                                      |
 | void                                                      | :ref:`remove_translation_parser_plugin<class_EditorPlugin_method_remove_translation_parser_plugin>` **(** :ref:`EditorTranslationParserPlugin<class_EditorTranslationParserPlugin>` parser **)**                                                      |
@@ -600,7 +600,7 @@ Ideally, the plugin icon should be white with a transparent background and 16x16
         # You can use a custom icon:
         # You can use a custom icon:
         return preload("res://addons/my_plugin/my_plugin_icon.svg")
         return preload("res://addons/my_plugin/my_plugin_icon.svg")
         # Or use a built-in icon:
         # Or use a built-in icon:
-        return get_editor_interface().get_base_control().get_icon("Node", "EditorIcons")
+        return get_editor_interface().get_base_control().get_theme_icon("Node", "EditorIcons")
 
 
  .. code-tab:: csharp
  .. code-tab:: csharp
 
 
@@ -609,7 +609,7 @@ Ideally, the plugin icon should be white with a transparent background and 16x16
         // You can use a custom icon:
         // You can use a custom icon:
         return ResourceLoader.Load<Texture2D>("res://addons/my_plugin/my_plugin_icon.svg");
         return ResourceLoader.Load<Texture2D>("res://addons/my_plugin/my_plugin_icon.svg");
         // Or use a built-in icon:
         // Or use a built-in icon:
-        return GetEditorInterface().GetBaseControl().GetIcon("Node", "EditorIcons");
+        return GetEditorInterface().GetBaseControl().GetThemeIcon("Node", "EditorIcons");
     }
     }
 
 
 
 
@@ -863,6 +863,16 @@ Registers a new :ref:`EditorInspectorPlugin<class_EditorInspectorPlugin>`. Inspe
 
 
 
 
 
 
+----
+
+.. _class_EditorPlugin_method_add_node_3d_gizmo_plugin:
+
+- void **add_node_3d_gizmo_plugin** **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**
+
+Registers a new :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>`. Gizmo plugins are used to add custom gizmos to the 3D preview viewport for a :ref:`Node3D<class_Node3D>`.
+
+See :ref:`add_inspector_plugin<class_EditorPlugin_method_add_inspector_plugin>` for an example of how to register a plugin.
+
 ----
 ----
 
 
 .. _class_EditorPlugin_method_add_scene_format_importer_plugin:
 .. _class_EditorPlugin_method_add_scene_format_importer_plugin:
@@ -885,16 +895,6 @@ If ``first_priority`` is ``true``, the new import plugin is inserted first in th
 
 
 ----
 ----
 
 
-.. _class_EditorPlugin_method_add_spatial_gizmo_plugin:
-
-- void **add_spatial_gizmo_plugin** **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**
-
-Registers a new :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>`. Gizmo plugins are used to add custom gizmos to the 3D preview viewport for a :ref:`Node3D<class_Node3D>`.
-
-See :ref:`add_inspector_plugin<class_EditorPlugin_method_add_inspector_plugin>` for an example of how to register a plugin.
-
-----
-
 .. _class_EditorPlugin_method_add_tool_menu_item:
 .. _class_EditorPlugin_method_add_tool_menu_item:
 
 
 - void **add_tool_menu_item** **(** :ref:`String<class_String>` name, :ref:`Callable<class_Callable>` callable **)**
 - void **add_tool_menu_item** **(** :ref:`String<class_String>` name, :ref:`Callable<class_Callable>` callable **)**
@@ -1061,6 +1061,14 @@ Removes an inspector plugin registered by :ref:`add_import_plugin<class_EditorPl
 
 
 ----
 ----
 
 
+.. _class_EditorPlugin_method_remove_node_3d_gizmo_plugin:
+
+- void **remove_node_3d_gizmo_plugin** **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**
+
+Removes a gizmo plugin registered by :ref:`add_node_3d_gizmo_plugin<class_EditorPlugin_method_add_node_3d_gizmo_plugin>`.
+
+----
+
 .. _class_EditorPlugin_method_remove_scene_format_importer_plugin:
 .. _class_EditorPlugin_method_remove_scene_format_importer_plugin:
 
 
 - void **remove_scene_format_importer_plugin** **(** :ref:`EditorSceneFormatImporter<class_EditorSceneFormatImporter>` scene_format_importer **)**
 - void **remove_scene_format_importer_plugin** **(** :ref:`EditorSceneFormatImporter<class_EditorSceneFormatImporter>` scene_format_importer **)**
@@ -1077,14 +1085,6 @@ Remove the :ref:`EditorScenePostImportPlugin<class_EditorScenePostImportPlugin>`
 
 
 ----
 ----
 
 
-.. _class_EditorPlugin_method_remove_spatial_gizmo_plugin:
-
-- void **remove_spatial_gizmo_plugin** **(** :ref:`EditorNode3DGizmoPlugin<class_EditorNode3DGizmoPlugin>` plugin **)**
-
-Removes a gizmo plugin registered by :ref:`add_spatial_gizmo_plugin<class_EditorPlugin_method_add_spatial_gizmo_plugin>`.
-
-----
-
 .. _class_EditorPlugin_method_remove_tool_menu_item:
 .. _class_EditorPlugin_method_remove_tool_menu_item:
 
 
 - void **remove_tool_menu_item** **(** :ref:`String<class_String>` name **)**
 - void **remove_tool_menu_item** **(** :ref:`String<class_String>` name **)**

+ 10 - 0
classes/class_editorproperty.rst

@@ -41,6 +41,8 @@ Properties
 Methods
 Methods
 -------
 -------
 
 
++-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                | :ref:`_set_read_only<class_EditorProperty_method__set_read_only>` **(** :ref:`bool<class_bool>` read_only **)** |virtual|                                                                                                                          |
 +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                | :ref:`_update_property<class_EditorProperty_method__update_property>` **(** **)** |virtual|                                                                                                                                                        |
 | void                                | :ref:`_update_property<class_EditorProperty_method__update_property>` **(** **)** |virtual|                                                                                                                                                        |
 +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -264,6 +266,14 @@ Used by the inspector, set to ``true`` when the property is read-only.
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
 
 
+.. _class_EditorProperty_method__set_read_only:
+
+- void **_set_read_only** **(** :ref:`bool<class_bool>` read_only **)** |virtual|
+
+Called when the read-only status of the property is changed. It may be used to change custom controls into a read-only or modifiable state.
+
+----
+
 .. _class_EditorProperty_method__update_property:
 .. _class_EditorProperty_method__update_property:
 
 
 - void **_update_property** **(** **)** |virtual|
 - void **_update_property** **(** **)** |virtual|

+ 1 - 1
classes/class_editorscenepostimport.rst

@@ -26,7 +26,7 @@ The :ref:`_post_import<class_EditorScenePostImport_method__post_import>` callbac
 
 
  .. code-tab:: gdscript
  .. code-tab:: gdscript
 
 
-    tool # Needed so it runs in editor.
+    @tool # Needed so it runs in editor.
     extends EditorScenePostImport
     extends EditorScenePostImport
     # This sample changes all node names.
     # This sample changes all node names.
     # Called right after the scene is imported and gets the root node.
     # Called right after the scene is imported and gets the root node.

+ 1 - 1
classes/class_editorscript.rst

@@ -28,7 +28,7 @@ Scripts extending this class and implementing its :ref:`_run<class_EditorScript_
 
 
  .. code-tab:: gdscript
  .. code-tab:: gdscript
 
 
-    tool
+    @tool
     extends EditorScript
     extends EditorScript
     
     
     func _run():
     func _run():

+ 5 - 5
classes/class_editorsettings.rst

@@ -905,9 +905,9 @@ The navigation scheme to use in the 3D editor. Changing this setting will affect
 
 
 - **Godot** Middle mouse button to orbit, :kbd:`Shift + Middle mouse button` to pan. :kbd:`Mouse wheel` to zoom.
 - **Godot** Middle mouse button to orbit, :kbd:`Shift + Middle mouse button` to pan. :kbd:`Mouse wheel` to zoom.
 
 
-- **Maya:** :kbd:`Alt + Left mouse buttton` to orbit. :kbd:`Middle mouse button` to pan, :kbd:`Shift + Middle mouse button` to pan 10 times faster. :kbd:`Mouse wheel` to zoom.
+- **Maya:** :kbd:`Alt + Left mouse button` to orbit. :kbd:`Middle mouse button` to pan, :kbd:`Shift + Middle mouse button` to pan 10 times faster. :kbd:`Mouse wheel` to zoom.
 
 
-- **Modo:** :kbd:`Alt + Left mouse buttton` to orbit. :kbd:`Alt + Shift + Left mouse button` to pan. :kbd:`Ctrl + Alt + Left mouse button` to zoom.
+- **Modo:** :kbd:`Alt + Left mouse button` to orbit. :kbd:`Alt + Shift + Left mouse button` to pan. :kbd:`Ctrl + Alt + Left mouse button` to zoom.
 
 
 See also :ref:`editors/3d/freelook/freelook_navigation_scheme<class_EditorSettings_property_editors/3d/freelook/freelook_navigation_scheme>`.
 See also :ref:`editors/3d/freelook/freelook_navigation_scheme<class_EditorSettings_property_editors/3d/freelook/freelook_navigation_scheme>`.
 
 
@@ -1143,7 +1143,7 @@ If ``true``, allows panning by holding down :kbd:`Space` in the 2D editor viewpo
 
 
 - :ref:`int<class_int>` **editors/panning/sub_editors_panning_scheme**
 - :ref:`int<class_int>` **editors/panning/sub_editors_panning_scheme**
 
 
-Controls whether the mouse wheel scroll zooms or pans in subeditors. The list of affected subeditors is: animation blend tree editor, :ref:`Polygon2D<class_Polygon2D>` editor, tileset editor, texture region editor, visual shader editor and visual script editor. See also :ref:`editors/panning/2d_editor_panning_scheme<class_EditorSettings_property_editors/panning/2d_editor_panning_scheme>` and :ref:`editors/panning/animation_editors_panning_scheme<class_EditorSettings_property_editors/panning/animation_editors_panning_scheme>`.
+Controls whether the mouse wheel scroll zooms or pans in subeditors. The list of affected subeditors is: animation blend tree editor, :ref:`Polygon2D<class_Polygon2D>` editor, tileset editor, texture region editor and visual shader editor. See also :ref:`editors/panning/2d_editor_panning_scheme<class_EditorSettings_property_editors/panning/2d_editor_panning_scheme>` and :ref:`editors/panning/animation_editors_panning_scheme<class_EditorSettings_property_editors/panning/animation_editors_panning_scheme>`.
 
 
 ----
 ----
 
 
@@ -1193,7 +1193,7 @@ The color to use for the TileMap editor's grid.
 
 
 - :ref:`float<class_float>` **editors/visual_editors/lines_curvature**
 - :ref:`float<class_float>` **editors/visual_editors/lines_curvature**
 
 
-The curvature to use for connection lines in the visual script and visual shader editors. Higher values will make connection lines appear more curved, with values above ``0.5`` resulting in more "angular" turns in the middle of connection lines.
+The curvature to use for connection lines in the visual shader editor. Higher values will make connection lines appear more curved, with values above ``0.5`` resulting in more "angular" turns in the middle of connection lines.
 
 
 ----
 ----
 
 
@@ -1201,7 +1201,7 @@ The curvature to use for connection lines in the visual script and visual shader
 
 
 - :ref:`float<class_float>` **editors/visual_editors/minimap_opacity**
 - :ref:`float<class_float>` **editors/visual_editors/minimap_opacity**
 
 
-The opacity of the minimap displayed in the bottom-right corner of the visual script and visual shader editors.
+The opacity of the minimap displayed in the bottom-right corner of the visual shader editor.
 
 
 ----
 ----
 
 

+ 2 - 2
classes/class_editortranslationparserplugin.rst

@@ -32,7 +32,7 @@ Below shows an example of a custom parser that extracts strings from a CSV file
 
 
  .. code-tab:: gdscript
  .. code-tab:: gdscript
 
 
-    tool
+    @tool
     extends EditorTranslationParserPlugin
     extends EditorTranslationParserPlugin
     
     
     func _parse_file(path, msgids, msgids_context_plural):
     func _parse_file(path, msgids, msgids_context_plural):
@@ -101,7 +101,7 @@ To add a translatable string associated with context or plural, add it to ``msgi
 
 
 
 
 
 
-\ **Note:** If you override parsing logic for standard script types (GDScript, C#, etc.), it would be better to load the ``path`` argument using :ref:`ResourceLoader.load<class_ResourceLoader_method_load>`. This is because built-in scripts are loaded as :ref:`Resource<class_Resource>` type, not :ref:`File<class_File>` type.
+\ **Note:** If you override parsing logic for standard script types (GDScript, C#, etc.), it would be better to load the ``path`` argument using :ref:`ResourceLoader.load<class_ResourceLoader_method_load>`. This is because built-in scripts are loaded as :ref:`Resource<class_Resource>` type, not :ref:`FileAccess<class_FileAccess>` type.
 
 
 For example:
 For example:
 
 

+ 91 - 23
classes/class_engine.rst

@@ -22,6 +22,8 @@ The ``Engine`` singleton allows you to query and modify the project's run-time p
 Properties
 Properties
 ----------
 ----------
 
 
++---------------------------+---------------------------------------------------------------------------------+----------+
+| :ref:`int<class_int>`     | :ref:`max_fps<class_Engine_property_max_fps>`                                   | ``0``    |
 +---------------------------+---------------------------------------------------------------------------------+----------+
 +---------------------------+---------------------------------------------------------------------------------+----------+
 | :ref:`float<class_float>` | :ref:`physics_jitter_fix<class_Engine_property_physics_jitter_fix>`             | ``0.5``  |
 | :ref:`float<class_float>` | :ref:`physics_jitter_fix<class_Engine_property_physics_jitter_fix>`             | ``0.5``  |
 +---------------------------+---------------------------------------------------------------------------------+----------+
 +---------------------------+---------------------------------------------------------------------------------+----------+
@@ -29,8 +31,6 @@ Properties
 +---------------------------+---------------------------------------------------------------------------------+----------+
 +---------------------------+---------------------------------------------------------------------------------+----------+
 | :ref:`bool<class_bool>`   | :ref:`print_error_messages<class_Engine_property_print_error_messages>`         | ``true`` |
 | :ref:`bool<class_bool>`   | :ref:`print_error_messages<class_Engine_property_print_error_messages>`         | ``true`` |
 +---------------------------+---------------------------------------------------------------------------------+----------+
 +---------------------------+---------------------------------------------------------------------------------+----------+
-| :ref:`int<class_int>`     | :ref:`target_fps<class_Engine_property_target_fps>`                             | ``0``    |
-+---------------------------+---------------------------------------------------------------------------------+----------+
 | :ref:`float<class_float>` | :ref:`time_scale<class_Engine_property_time_scale>`                             | ``1.0``  |
 | :ref:`float<class_float>` | :ref:`time_scale<class_Engine_property_time_scale>`                             | ``1.0``  |
 +---------------------------+---------------------------------------------------------------------------------+----------+
 +---------------------------+---------------------------------------------------------------------------------+----------+
 
 
@@ -90,6 +90,32 @@ Methods
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
 
 
+.. _class_Engine_property_max_fps:
+
+- :ref:`int<class_int>` **max_fps**
+
++-----------+--------------------+
+| *Default* | ``0``              |
++-----------+--------------------+
+| *Setter*  | set_max_fps(value) |
++-----------+--------------------+
+| *Getter*  | get_max_fps()      |
++-----------+--------------------+
+
+The maximum number of frames per second that can be rendered. A value of ``0`` means "no limit". The actual number of frames per second may still be below this value if the CPU or GPU cannot keep up with the project logic and rendering.
+
+Limiting the FPS can be useful to reduce system power consumption, which reduces heat and noise emissions (and improves battery life on mobile devices).
+
+If :ref:`ProjectSettings.display/window/vsync/vsync_mode<class_ProjectSettings_property_display/window/vsync/vsync_mode>` is ``Enabled`` or ``Adaptive``, it takes precedence and the forced FPS number cannot exceed the monitor's refresh rate.
+
+If :ref:`ProjectSettings.display/window/vsync/vsync_mode<class_ProjectSettings_property_display/window/vsync/vsync_mode>` is ``Enabled``, on monitors with variable refresh rate enabled (G-Sync/FreeSync), using a FPS limit a few frames lower than the monitor's refresh rate will `reduce input lag while avoiding tearing <https://blurbusters.com/howto-low-lag-vsync-on/>`__.
+
+If :ref:`ProjectSettings.display/window/vsync/vsync_mode<class_ProjectSettings_property_display/window/vsync/vsync_mode>` is ``Disabled``, limiting the FPS to a high value that can be consistently reached on the system can reduce input lag compared to an uncapped framerate. Since this works by ensuring the GPU load is lower than 100%, this latency reduction is only effective in GPU-bottlenecked scenarios, not CPU-bottlenecked scenarios.
+
+See also :ref:`physics_ticks_per_second<class_Engine_property_physics_ticks_per_second>` and :ref:`ProjectSettings.application/run/max_fps<class_ProjectSettings_property_application/run/max_fps>`.
+
+----
+
 .. _class_Engine_property_physics_jitter_fix:
 .. _class_Engine_property_physics_jitter_fix:
 
 
 - :ref:`float<class_float>` **physics_jitter_fix**
 - :ref:`float<class_float>` **physics_jitter_fix**
@@ -120,7 +146,7 @@ Controls how much physics ticks are synchronized with real time. For 0 or less,
 | *Getter*  | get_physics_ticks_per_second()      |
 | *Getter*  | get_physics_ticks_per_second()      |
 +-----------+-------------------------------------+
 +-----------+-------------------------------------+
 
 
-The number of fixed iterations per second. This controls how often physics simulation and :ref:`Node._physics_process<class_Node_method__physics_process>` methods are run. This value should generally always be set to ``60`` or above, as Godot doesn't interpolate the physics step. As a result, values lower than ``60`` will look stuttery. This value can be increased to make input more reactive or work around collision tunneling issues, but keep in mind doing so will increase CPU usage. See also :ref:`target_fps<class_Engine_property_target_fps>` and :ref:`ProjectSettings.physics/common/physics_ticks_per_second<class_ProjectSettings_property_physics/common/physics_ticks_per_second>`.
+The number of fixed iterations per second. This controls how often physics simulation and :ref:`Node._physics_process<class_Node_method__physics_process>` methods are run. This value should generally always be set to ``60`` or above, as Godot doesn't interpolate the physics step. As a result, values lower than ``60`` will look stuttery. This value can be increased to make input more reactive or work around collision tunneling issues, but keep in mind doing so will increase CPU usage. See also :ref:`max_fps<class_Engine_property_max_fps>` and :ref:`ProjectSettings.physics/common/physics_ticks_per_second<class_ProjectSettings_property_physics/common/physics_ticks_per_second>`.
 
 
 \ **Note:** Only 8 physics ticks may be simulated per rendered frame at most. If more than 8 physics ticks have to be simulated per rendered frame to keep up with rendering, the game will appear to slow down (even if ``delta`` is used consistently in physics calculations). Therefore, it is recommended not to increase :ref:`physics_ticks_per_second<class_Engine_property_physics_ticks_per_second>` above 240. Otherwise, the game will slow down when the rendering framerate goes below 30 FPS.
 \ **Note:** Only 8 physics ticks may be simulated per rendered frame at most. If more than 8 physics ticks have to be simulated per rendered frame to keep up with rendering, the game will appear to slow down (even if ``delta`` is used consistently in physics calculations). Therefore, it is recommended not to increase :ref:`physics_ticks_per_second<class_Engine_property_physics_ticks_per_second>` above 240. Otherwise, the game will slow down when the rendering framerate goes below 30 FPS.
 
 
@@ -146,22 +172,6 @@ If ``false``, stops printing error and warning messages to the console and edito
 
 
 ----
 ----
 
 
-.. _class_Engine_property_target_fps:
-
-- :ref:`int<class_int>` **target_fps**
-
-+-----------+-----------------------+
-| *Default* | ``0``                 |
-+-----------+-----------------------+
-| *Setter*  | set_target_fps(value) |
-+-----------+-----------------------+
-| *Getter*  | get_target_fps()      |
-+-----------+-----------------------+
-
-The desired frames per second. If the hardware cannot keep up, this setting may not be respected. A value of 0 means no limit. See also :ref:`physics_ticks_per_second<class_Engine_property_physics_ticks_per_second>` and :ref:`ProjectSettings.debug/settings/fps/force_fps<class_ProjectSettings_property_debug/settings/fps/force_fps>`.
-
-----
-
 .. _class_Engine_property_time_scale:
 .. _class_Engine_property_time_scale:
 
 
 - :ref:`float<class_float>` **time_scale**
 - :ref:`float<class_float>` **time_scale**
@@ -187,13 +197,25 @@ Returns the name of the CPU architecture the Godot binary was built for. Possibl
 
 
 To detect whether the current CPU architecture is 64-bit, you can use the fact that all 64-bit architecture names have ``64`` in their name:
 To detect whether the current CPU architecture is 64-bit, you can use the fact that all 64-bit architecture names have ``64`` in their name:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     if "64" in Engine.get_architecture_name():
     if "64" in Engine.get_architecture_name():
         print("Running on 64-bit CPU.")
         print("Running on 64-bit CPU.")
     else:
     else:
         print("Running on 32-bit CPU.")
         print("Running on 32-bit CPU.")
 
 
+ .. code-tab:: csharp
+
+    if (Engine.GetArchitectureName().Contains("64"))
+        GD.Print("Running on 64-bit CPU.");
+    else
+        GD.Print("Running on 32-bit CPU.");
+
+
+
 \ **Note:** :ref:`get_architecture_name<class_Engine_method_get_architecture_name>` does *not* return the name of the host CPU architecture. For example, if running an x86_32 Godot binary on a x86_64 system, the returned value will be ``x86_32``.
 \ **Note:** :ref:`get_architecture_name<class_Engine_method_get_architecture_name>` does *not* return the name of the host CPU architecture. For example, if running an x86_32 Godot binary on a x86_64 system, the returned value will be ``x86_32``.
 
 
 ----
 ----
@@ -284,12 +306,29 @@ Returns the total number of frames passed since engine initialization which is a
 
 
 \ :ref:`get_physics_frames<class_Engine_method_get_physics_frames>` can be used to run expensive logic less often without relying on a :ref:`Timer<class_Timer>`:
 \ :ref:`get_physics_frames<class_Engine_method_get_physics_frames>` can be used to run expensive logic less often without relying on a :ref:`Timer<class_Timer>`:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     func _physics_process(_delta):
     func _physics_process(_delta):
         if Engine.get_physics_frames() % 2 == 0:
         if Engine.get_physics_frames() % 2 == 0:
             pass  # Run expensive logic only once every 2 physics frames here.
             pass  # Run expensive logic only once every 2 physics frames here.
 
 
+ .. code-tab:: csharp
+
+    public override void _PhysicsProcess(double delta)
+    {
+        base._PhysicsProcess(delta);
+    
+        if (Engine.GetPhysicsFrames() % 2 == 0)
+        {
+            // Run expensive logic only once every 2 physics frames here.
+        }
+    }
+
+
+
 ----
 ----
 
 
 .. _class_Engine_method_get_physics_interpolation_fraction:
 .. _class_Engine_method_get_physics_interpolation_fraction:
@@ -308,12 +347,29 @@ Returns the total number of frames passed since engine initialization which is a
 
 
 \ :ref:`get_process_frames<class_Engine_method_get_process_frames>` can be used to run expensive logic less often without relying on a :ref:`Timer<class_Timer>`:
 \ :ref:`get_process_frames<class_Engine_method_get_process_frames>` can be used to run expensive logic less often without relying on a :ref:`Timer<class_Timer>`:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     func _process(_delta):
     func _process(_delta):
         if Engine.get_process_frames() % 2 == 0:
         if Engine.get_process_frames() % 2 == 0:
             pass  # Run expensive logic only once every 2 process (render) frames here.
             pass  # Run expensive logic only once every 2 process (render) frames here.
 
 
+ .. code-tab:: csharp
+
+    public override void _Process(double delta)
+    {
+        base._Process(delta);
+    
+        if (Engine.GetProcessFrames() % 2 == 0)
+        {
+            // Run expensive logic only once every 2 physics frames here.
+        }
+    }
+
+
+
 ----
 ----
 
 
 .. _class_Engine_method_get_script_language:
 .. _class_Engine_method_get_script_language:
@@ -415,13 +471,25 @@ Returns ``true`` if a singleton with given ``name`` exists in global scope.
 
 
 Returns ``true`` if the script is currently running inside the editor, ``false`` otherwise. This is useful for ``@tool`` scripts to conditionally draw editor helpers, or prevent accidentally running "game" code that would affect the scene state while in the editor:
 Returns ``true`` if the script is currently running inside the editor, ``false`` otherwise. This is useful for ``@tool`` scripts to conditionally draw editor helpers, or prevent accidentally running "game" code that would affect the scene state while in the editor:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     if Engine.is_editor_hint():
     if Engine.is_editor_hint():
         draw_gizmos()
         draw_gizmos()
     else:
     else:
         simulate_physics()
         simulate_physics()
 
 
+ .. code-tab:: csharp
+
+    if (Engine.IsEditorHint())
+        DrawGizmos();
+    else
+        SimulatePhysics();
+
+
+
 See :doc:`Running code in the editor <../tutorials/plugins/running_code_in_the_editor>` in the documentation for more information.
 See :doc:`Running code in the editor <../tutorials/plugins/running_code_in_the_editor>` in the documentation for more information.
 
 
 \ **Note:** To detect whether the script is run from an editor *build* (e.g. when pressing :kbd:`F5`), use :ref:`OS.has_feature<class_OS_method_has_feature>` with the ``"editor"`` argument instead. ``OS.has_feature("editor")`` will evaluate to ``true`` both when the code is running in the editor and when running the project from the editor, but it will evaluate to ``false`` when the code is run from an exported project.
 \ **Note:** To detect whether the script is run from an editor *build* (e.g. when pressing :kbd:`F5`), use :ref:`OS.has_feature<class_OS_method_has_feature>` with the ``"editor"`` argument instead. ``OS.has_feature("editor")`` will evaluate to ``true`` both when the code is running in the editor and when running the project from the editor, but it will evaluate to ``false`` when the code is run from an exported project.

+ 17 - 7
classes/class_environment.rst

@@ -658,7 +658,7 @@ This is useful to simulate `aerial perspective <https://en.wikipedia.org/wiki/Ae
 | *Getter*  | get_fog_density()      |
 | *Getter*  | get_fog_density()      |
 +-----------+------------------------+
 +-----------+------------------------+
 
 
-The exponential fog density to use. Higher values result in a more dense fog.
+The *exponential* fog density to use. Higher values result in a more dense fog. Fog rendering is exponential as in real life.
 
 
 ----
 ----
 
 
@@ -1726,7 +1726,9 @@ The :ref:`Color<class_Color>` of the volumetric fog when interacting with lights
 | *Getter*  | get_volumetric_fog_ambient_inject()      |
 | *Getter*  | get_volumetric_fog_ambient_inject()      |
 +-----------+------------------------------------------+
 +-----------+------------------------------------------+
 
 
-Scales the strength of ambient light used in the volumetric fog. A value of ``0`` means that ambient light will not impact the volumetric fog.
+Scales the strength of ambient light used in the volumetric fog. A value of ``0.0`` means that ambient light will not impact the volumetric fog. :ref:`volumetric_fog_ambient_inject<class_Environment_property_volumetric_fog_ambient_inject>` has a small performance cost when set above ``0.0``.
+
+\ **Note:** This has no visible effect if :ref:`volumetric_fog_density<class_Environment_property_volumetric_fog_density>` is ``0.0`` or if :ref:`volumetric_fog_albedo<class_Environment_property_volumetric_fog_albedo>` is a fully black color.
 
 
 ----
 ----
 
 
@@ -1742,7 +1744,7 @@ Scales the strength of ambient light used in the volumetric fog. A value of ``0`
 | *Getter*  | get_volumetric_fog_anisotropy()      |
 | *Getter*  | get_volumetric_fog_anisotropy()      |
 +-----------+--------------------------------------+
 +-----------+--------------------------------------+
 
 
-The direction of scattered light as it goes through the volumetric fog. A value close ``1`` means almost all light is scattered forward. A value close to ``0`` means light is scattered equally in all directions. A value close to ``-1`` means light is scattered mostly backward. Fog and mist scatter light slightly forward, while smoke scatters light equally in all directions.
+The direction of scattered light as it goes through the volumetric fog. A value close to ``1.0`` means almost all light is scattered forward. A value close to ``0.0`` means light is scattered equally in all directions. A value close to ``-1.0`` means light is scattered mostly backward. Fog and mist scatter light slightly forward, while smoke scatters light equally in all directions.
 
 
 ----
 ----
 
 
@@ -1758,7 +1760,9 @@ The direction of scattered light as it goes through the volumetric fog. A value
 | *Getter*  | get_volumetric_fog_density()      |
 | *Getter*  | get_volumetric_fog_density()      |
 +-----------+-----------------------------------+
 +-----------+-----------------------------------+
 
 
-The base density of the volumetric fog. Set this to the lowest density you want to have globally.
+The base *exponential* density of the volumetric fog. Set this to the lowest density you want to have globally. :ref:`FogVolume<class_FogVolume>`\ s can be used to add to or subtract from this density in specific areas. Fog rendering is exponential as in real life.
+
+A value of ``0.0`` disables global volumetric fog while allowing :ref:`FogVolume<class_FogVolume>`\ s to display volumetric fog in specific areas.
 
 
 ----
 ----
 
 
@@ -1824,6 +1828,8 @@ The brightness of the emitted light from the volumetric fog.
 
 
 Enables the volumetric fog effect. Volumetric fog uses a screen-aligned froxel buffer to calculate accurate volumetric scattering in the short to medium range. Volumetric fog interacts with :ref:`FogVolume<class_FogVolume>`\ s and lights to calculate localized and global fog. Volumetric fog uses a PBR single-scattering model based on extinction, scattering, and emission which it exposes to users as density, albedo, and emission.
 Enables the volumetric fog effect. Volumetric fog uses a screen-aligned froxel buffer to calculate accurate volumetric scattering in the short to medium range. Volumetric fog interacts with :ref:`FogVolume<class_FogVolume>`\ s and lights to calculate localized and global fog. Volumetric fog uses a PBR single-scattering model based on extinction, scattering, and emission which it exposes to users as density, albedo, and emission.
 
 
+\ **Note:** Volumetric fog is only available in the forward plus renderer. It is not available in the mobile renderer or the compatibility renderer.
+
 ----
 ----
 
 
 .. _class_Environment_property_volumetric_fog_gi_inject:
 .. _class_Environment_property_volumetric_fog_gi_inject:
@@ -1838,7 +1844,9 @@ Enables the volumetric fog effect. Volumetric fog uses a screen-aligned froxel b
 | *Getter*  | get_volumetric_fog_gi_inject()      |
 | *Getter*  | get_volumetric_fog_gi_inject()      |
 +-----------+-------------------------------------+
 +-----------+-------------------------------------+
 
 
-Scales the strength of Global Illumination used in the volumetric fog. A value of ``0.0`` means that Global Illumination will not impact the volumetric fog.
+Scales the strength of Global Illumination used in the volumetric fog's albedo color. A value of ``0.0`` means that Global Illumination will not impact the volumetric fog. :ref:`volumetric_fog_gi_inject<class_Environment_property_volumetric_fog_gi_inject>` has a small performance cost when set above ``0.0``.
+
+\ **Note:** This has no visible effect if :ref:`volumetric_fog_density<class_Environment_property_volumetric_fog_density>` is ``0.0`` or if :ref:`volumetric_fog_albedo<class_Environment_property_volumetric_fog_albedo>` is a fully black color.
 
 
 \ **Note:** Only :ref:`VoxelGI<class_VoxelGI>` and SDFGI (:ref:`sdfgi_enabled<class_Environment_property_sdfgi_enabled>`) are taken into account when using :ref:`volumetric_fog_gi_inject<class_Environment_property_volumetric_fog_gi_inject>`. Global illumination from :ref:`LightmapGI<class_LightmapGI>`, :ref:`ReflectionProbe<class_ReflectionProbe>` and SSIL (see :ref:`ssil_enabled<class_Environment_property_ssil_enabled>`) will be ignored by volumetric fog.
 \ **Note:** Only :ref:`VoxelGI<class_VoxelGI>` and SDFGI (:ref:`sdfgi_enabled<class_Environment_property_sdfgi_enabled>`) are taken into account when using :ref:`volumetric_fog_gi_inject<class_Environment_property_volumetric_fog_gi_inject>`. Global illumination from :ref:`LightmapGI<class_LightmapGI>`, :ref:`ReflectionProbe<class_ReflectionProbe>` and SSIL (see :ref:`ssil_enabled<class_Environment_property_ssil_enabled>`) will be ignored by volumetric fog.
 
 
@@ -1856,7 +1864,7 @@ Scales the strength of Global Illumination used in the volumetric fog. A value o
 | *Getter*  | get_volumetric_fog_length()      |
 | *Getter*  | get_volumetric_fog_length()      |
 +-----------+----------------------------------+
 +-----------+----------------------------------+
 
 
-The distance over which the volumetric fog is computed. Increase to compute fog over a greater range, decrease to add more detail when a long range is not needed. For best quality fog, keep this as low as possible.
+The distance over which the volumetric fog is computed. Increase to compute fog over a greater range, decrease to add more detail when a long range is not needed. For best quality fog, keep this as low as possible. See also :ref:`ProjectSettings.rendering/environment/volumetric_fog/volume_depth<class_ProjectSettings_property_rendering/environment/volumetric_fog/volume_depth>`.
 
 
 ----
 ----
 
 
@@ -1874,6 +1882,8 @@ The distance over which the volumetric fog is computed. Increase to compute fog
 
 
 The factor to use when affecting the sky with volumetric fog. ``1.0`` means that volumetric fog can fully obscure the sky. Lower values reduce the impact of volumetric fog on sky rendering, with ``0.0`` not affecting sky rendering at all.
 The factor to use when affecting the sky with volumetric fog. ``1.0`` means that volumetric fog can fully obscure the sky. Lower values reduce the impact of volumetric fog on sky rendering, with ``0.0`` not affecting sky rendering at all.
 
 
+\ **Note:** :ref:`volumetric_fog_sky_affect<class_Environment_property_volumetric_fog_sky_affect>` also affects :ref:`FogVolume<class_FogVolume>`\ s, even if :ref:`volumetric_fog_density<class_Environment_property_volumetric_fog_density>` is ``0.0``. If you notice :ref:`FogVolume<class_FogVolume>`\ s are disappearing when looking towards the sky, set :ref:`volumetric_fog_sky_affect<class_Environment_property_volumetric_fog_sky_affect>` to ``1.0``.
+
 ----
 ----
 
 
 .. _class_Environment_property_volumetric_fog_temporal_reprojection_amount:
 .. _class_Environment_property_volumetric_fog_temporal_reprojection_amount:
@@ -1904,7 +1914,7 @@ The amount by which to blend the last frame with the current frame. A higher num
 | *Getter*  | is_volumetric_fog_temporal_reprojection_enabled()       |
 | *Getter*  | is_volumetric_fog_temporal_reprojection_enabled()       |
 +-----------+---------------------------------------------------------+
 +-----------+---------------------------------------------------------+
 
 
-Enables temporal reprojection in the volumetric fog. Temporal reprojection blends the current frame's volumetric fog with the last frame's volumetric fog to smooth out jagged edges. The performance cost is minimal, however it does lead to moving :ref:`FogVolume<class_FogVolume>`\ s and :ref:`Light3D<class_Light3D>`\ s "ghosting" and leaving a trail behind them. When temporal reprojection is enabled, try to avoid moving :ref:`FogVolume<class_FogVolume>`\ s or :ref:`Light3D<class_Light3D>`\ s too fast.
+Enables temporal reprojection in the volumetric fog. Temporal reprojection blends the current frame's volumetric fog with the last frame's volumetric fog to smooth out jagged edges. The performance cost is minimal; however, it leads to moving :ref:`FogVolume<class_FogVolume>`\ s and :ref:`Light3D<class_Light3D>`\ s "ghosting" and leaving a trail behind them. When temporal reprojection is enabled, try to avoid moving :ref:`FogVolume<class_FogVolume>`\ s or :ref:`Light3D<class_Light3D>`\ s too fast. Short-lived dynamic lighting effects should have :ref:`Light3D.light_volumetric_fog_energy<class_Light3D_property_light_volumetric_fog_energy>` set to ``0.0`` to avoid ghosting.
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------

+ 225 - 210
classes/class_file.rst → classes/class_fileaccess.rst

@@ -3,12 +3,12 @@
 .. DO NOT EDIT THIS FILE!!!
 .. DO NOT EDIT THIS FILE!!!
 .. Generated automatically from Godot engine sources.
 .. Generated automatically from Godot engine sources.
 .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
 .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
-.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/File.xml.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/FileAccess.xml.
 
 
-.. _class_File:
+.. _class_FileAccess:
 
 
-File
-====
+FileAccess
+==========
 
 
 **Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 **Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 
 
@@ -27,34 +27,26 @@ Here's a sample on how to write and read from a file:
  .. code-tab:: gdscript
  .. code-tab:: gdscript
 
 
     func save(content):
     func save(content):
-        var file = File.new()
-        file.open("user://save_game.dat", File.WRITE)
+        var file = FileAccess.open("user://save_game.dat", FileAccess.WRITE)
         file.store_string(content)
         file.store_string(content)
-        file.close()
     
     
     func load():
     func load():
-        var file = File.new()
-        file.open("user://save_game.dat", File.READ)
+        var file = FileAccess.open("user://save_game.dat", FileAccess.READ)
         var content = file.get_as_text()
         var content = file.get_as_text()
-        file.close()
         return content
         return content
 
 
  .. code-tab:: csharp
  .. code-tab:: csharp
 
 
     public void Save(string content)
     public void Save(string content)
     {
     {
-        var file = new File();
-        file.Open("user://save_game.dat", File.ModeFlags.Write);
+        using var file = FileAccess.Open("user://save_game.dat", FileAccess.ModeFlags.Write);
         file.StoreString(content);
         file.StoreString(content);
-        file.Close();
     }
     }
     
     
     public string Load()
     public string Load()
     {
     {
-        var file = new File();
-        file.Open("user://save_game.dat", File.ModeFlags.Read);
+        using var file = FileAccess.Open("user://save_game.dat", FileAccess.ModeFlags.Read);
         string content = file.GetAsText();
         string content = file.GetAsText();
-        file.Close();
         return content;
         return content;
     }
     }
 
 
@@ -62,9 +54,26 @@ Here's a sample on how to write and read from a file:
 
 
 In the example above, the file will be saved in the user data folder as specified in the :doc:`Data paths <../tutorials/io/data_paths>` documentation.
 In the example above, the file will be saved in the user data folder as specified in the :doc:`Data paths <../tutorials/io/data_paths>` documentation.
 
 
-\ **Note:** To access project resources once exported, it is recommended to use :ref:`ResourceLoader<class_ResourceLoader>` instead of the ``File`` API, as some files are converted to engine-specific formats and their original source files might not be present in the exported PCK package.
+There is no method to close a file in order to free it from use. Instead, ``FileAccess`` will close when it's freed, which happens when it goes out of scope or when it gets assigned with ``null``. In C# the reference must be disposed after we are done using it, this can be done with the ``using`` statement or calling the ``Dispose`` method directly.
 
 
-\ **Note:** Files are automatically closed only if the process exits "normally" (such as by clicking the window manager's close button or pressing **Alt + F4**). If you stop the project execution by pressing **F8** while the project is running, the file won't be closed as the game process will be killed. You can work around this by calling :ref:`flush<class_File_method_flush>` at regular intervals.
+
+.. tabs::
+
+ .. code-tab:: gdscript
+
+    var file = FileAccess.open("res://something") # File is opened and locked for use.
+    file = null # File is closed.
+
+ .. code-tab:: csharp
+
+    using var file = FileAccess.Open("res://something"); // File is opened and locked for use.
+    // The using statement calls Dispose when going out of scope.
+
+
+
+\ **Note:** To access project resources once exported, it is recommended to use :ref:`ResourceLoader<class_ResourceLoader>` instead of the ``FileAccess`` API, as some files are converted to engine-specific formats and their original source files might not be present in the exported PCK package.
+
+\ **Note:** Files are automatically closed only if the process exits "normally" (such as by clicking the window manager's close button or pressing **Alt + F4**). If you stop the project execution by pressing **F8** while the project is running, the file won't be closed as the game process will be killed. You can work around this by calling :ref:`flush<class_FileAccess_method_flush>` at regular intervals.
 
 
 Tutorials
 Tutorials
 ---------
 ---------
@@ -76,117 +85,117 @@ Tutorials
 Properties
 Properties
 ----------
 ----------
 
 
-+-------------------------+---------------------------------------------------+-----------+
-| :ref:`bool<class_bool>` | :ref:`big_endian<class_File_property_big_endian>` | ``false`` |
-+-------------------------+---------------------------------------------------+-----------+
++-------------------------+---------------------------------------------------------+
+| :ref:`bool<class_bool>` | :ref:`big_endian<class_FileAccess_property_big_endian>` |
++-------------------------+---------------------------------------------------------+
 
 
 Methods
 Methods
 -------
 -------
 
 
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`close<class_File_method_close>` **(** **)**                                                                                                                                                                              |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`eof_reached<class_File_method_eof_reached>` **(** **)** |const|                                                                                                                                                          |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`file_exists<class_File_method_file_exists>` **(** :ref:`String<class_String>` path **)** |static|                                                                                                                        |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`flush<class_File_method_flush>` **(** **)**                                                                                                                                                                              |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_16<class_File_method_get_16>` **(** **)** |const|                                                                                                                                                                    |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_32<class_File_method_get_32>` **(** **)** |const|                                                                                                                                                                    |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_64<class_File_method_get_64>` **(** **)** |const|                                                                                                                                                                    |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_8<class_File_method_get_8>` **(** **)** |const|                                                                                                                                                                      |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_as_text<class_File_method_get_as_text>` **(** :ref:`bool<class_bool>` skip_cr=false **)** |const|                                                                                                                    |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PackedByteArray<class_PackedByteArray>`     | :ref:`get_buffer<class_File_method_get_buffer>` **(** :ref:`int<class_int>` length **)** |const|                                                                                                                               |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_csv_line<class_File_method_get_csv_line>` **(** :ref:`String<class_String>` delim="," **)** |const|                                                                                                                  |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`float<class_float>`                         | :ref:`get_double<class_File_method_get_double>` **(** **)** |const|                                                                                                                                                            |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`get_error<class_File_method_get_error>` **(** **)** |const|                                                                                                                                                              |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`float<class_float>`                         | :ref:`get_float<class_File_method_get_float>` **(** **)** |const|                                                                                                                                                              |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_length<class_File_method_get_length>` **(** **)** |const|                                                                                                                                                            |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_line<class_File_method_get_line>` **(** **)** |const|                                                                                                                                                                |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_md5<class_File_method_get_md5>` **(** :ref:`String<class_String>` path **)** |const|                                                                                                                                 |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_modified_time<class_File_method_get_modified_time>` **(** :ref:`String<class_String>` file **)** |const|                                                                                                             |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_pascal_string<class_File_method_get_pascal_string>` **(** **)**                                                                                                                                                      |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_path<class_File_method_get_path>` **(** **)** |const|                                                                                                                                                                |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_path_absolute<class_File_method_get_path_absolute>` **(** **)** |const|                                                                                                                                              |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                             | :ref:`get_position<class_File_method_get_position>` **(** **)** |const|                                                                                                                                                        |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`float<class_float>`                         | :ref:`get_real<class_File_method_get_real>` **(** **)** |const|                                                                                                                                                                |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String<class_String>`                       | :ref:`get_sha256<class_File_method_get_sha256>` **(** :ref:`String<class_String>` path **)** |const|                                                                                                                           |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>`                     | :ref:`get_var<class_File_method_get_var>` **(** :ref:`bool<class_bool>` allow_objects=false **)** |const|                                                                                                                      |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`is_open<class_File_method_is_open>` **(** **)** |const|                                                                                                                                                                  |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`open<class_File_method_open>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` flags **)**                                                                                                  |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`open_compressed<class_File_method_open_compressed>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` mode_flags, :ref:`CompressionMode<enum_File_CompressionMode>` compression_mode=0 **)** |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`open_encrypted<class_File_method_open_encrypted>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` mode_flags, :ref:`PackedByteArray<class_PackedByteArray>` key **)**                      |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`open_encrypted_with_pass<class_File_method_open_encrypted_with_pass>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` mode_flags, :ref:`String<class_String>` pass **)**                   |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`seek<class_File_method_seek>` **(** :ref:`int<class_int>` position **)**                                                                                                                                                 |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`seek_end<class_File_method_seek_end>` **(** :ref:`int<class_int>` position=0 **)**                                                                                                                                       |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_16<class_File_method_store_16>` **(** :ref:`int<class_int>` value **)**                                                                                                                                            |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_32<class_File_method_store_32>` **(** :ref:`int<class_int>` value **)**                                                                                                                                            |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_64<class_File_method_store_64>` **(** :ref:`int<class_int>` value **)**                                                                                                                                            |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_8<class_File_method_store_8>` **(** :ref:`int<class_int>` value **)**                                                                                                                                              |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_buffer<class_File_method_store_buffer>` **(** :ref:`PackedByteArray<class_PackedByteArray>` buffer **)**                                                                                                           |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_csv_line<class_File_method_store_csv_line>` **(** :ref:`PackedStringArray<class_PackedStringArray>` values, :ref:`String<class_String>` delim="," **)**                                                            |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_double<class_File_method_store_double>` **(** :ref:`float<class_float>` value **)**                                                                                                                                |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_float<class_File_method_store_float>` **(** :ref:`float<class_float>` value **)**                                                                                                                                  |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_line<class_File_method_store_line>` **(** :ref:`String<class_String>` line **)**                                                                                                                                   |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_pascal_string<class_File_method_store_pascal_string>` **(** :ref:`String<class_String>` string **)**                                                                                                               |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_real<class_File_method_store_real>` **(** :ref:`float<class_float>` value **)**                                                                                                                                    |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_string<class_File_method_store_string>` **(** :ref:`String<class_String>` string **)**                                                                                                                             |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                              | :ref:`store_var<class_File_method_store_var>` **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` full_objects=false **)**                                                                                      |
-+---------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`eof_reached<class_FileAccess_method_eof_reached>` **(** **)** |const|                                                                                                                                                                               |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`file_exists<class_FileAccess_method_file_exists>` **(** :ref:`String<class_String>` path **)** |static|                                                                                                                                             |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`flush<class_FileAccess_method_flush>` **(** **)**                                                                                                                                                                                                   |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_16<class_FileAccess_method_get_16>` **(** **)** |const|                                                                                                                                                                                         |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_32<class_FileAccess_method_get_32>` **(** **)** |const|                                                                                                                                                                                         |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_64<class_FileAccess_method_get_64>` **(** **)** |const|                                                                                                                                                                                         |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_8<class_FileAccess_method_get_8>` **(** **)** |const|                                                                                                                                                                                           |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_as_text<class_FileAccess_method_get_as_text>` **(** :ref:`bool<class_bool>` skip_cr=false **)** |const|                                                                                                                                         |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedByteArray<class_PackedByteArray>`     | :ref:`get_buffer<class_FileAccess_method_get_buffer>` **(** :ref:`int<class_int>` length **)** |const|                                                                                                                                                    |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_csv_line<class_FileAccess_method_get_csv_line>` **(** :ref:`String<class_String>` delim="," **)** |const|                                                                                                                                       |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`float<class_float>`                         | :ref:`get_double<class_FileAccess_method_get_double>` **(** **)** |const|                                                                                                                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`get_error<class_FileAccess_method_get_error>` **(** **)** |const|                                                                                                                                                                                   |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`float<class_float>`                         | :ref:`get_float<class_FileAccess_method_get_float>` **(** **)** |const|                                                                                                                                                                                   |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_length<class_FileAccess_method_get_length>` **(** **)** |const|                                                                                                                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_line<class_FileAccess_method_get_line>` **(** **)** |const|                                                                                                                                                                                     |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_md5<class_FileAccess_method_get_md5>` **(** :ref:`String<class_String>` path **)** |static|                                                                                                                                                     |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_modified_time<class_FileAccess_method_get_modified_time>` **(** :ref:`String<class_String>` file **)** |static|                                                                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`get_open_error<class_FileAccess_method_get_open_error>` **(** **)** |static|                                                                                                                                                                        |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_pascal_string<class_FileAccess_method_get_pascal_string>` **(** **)**                                                                                                                                                                           |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_path<class_FileAccess_method_get_path>` **(** **)** |const|                                                                                                                                                                                     |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_path_absolute<class_FileAccess_method_get_path_absolute>` **(** **)** |const|                                                                                                                                                                   |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`get_position<class_FileAccess_method_get_position>` **(** **)** |const|                                                                                                                                                                             |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`float<class_float>`                         | :ref:`get_real<class_FileAccess_method_get_real>` **(** **)** |const|                                                                                                                                                                                     |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_sha256<class_FileAccess_method_get_sha256>` **(** :ref:`String<class_String>` path **)** |static|                                                                                                                                               |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Variant<class_Variant>`                     | :ref:`get_var<class_FileAccess_method_get_var>` **(** :ref:`bool<class_bool>` allow_objects=false **)** |const|                                                                                                                                           |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                           | :ref:`is_open<class_FileAccess_method_is_open>` **(** **)** |const|                                                                                                                                                                                       |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`FileAccess<class_FileAccess>`               | :ref:`open<class_FileAccess_method_open>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` flags **)** |static|                                                                                                        |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`FileAccess<class_FileAccess>`               | :ref:`open_compressed<class_FileAccess_method_open_compressed>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` mode_flags, :ref:`CompressionMode<enum_FileAccess_CompressionMode>` compression_mode=0 **)** |static| |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`FileAccess<class_FileAccess>`               | :ref:`open_encrypted<class_FileAccess_method_open_encrypted>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` mode_flags, :ref:`PackedByteArray<class_PackedByteArray>` key **)** |static|                            |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`FileAccess<class_FileAccess>`               | :ref:`open_encrypted_with_pass<class_FileAccess_method_open_encrypted_with_pass>` **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` mode_flags, :ref:`String<class_String>` pass **)** |static|                         |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`seek<class_FileAccess_method_seek>` **(** :ref:`int<class_int>` position **)**                                                                                                                                                                      |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`seek_end<class_FileAccess_method_seek_end>` **(** :ref:`int<class_int>` position=0 **)**                                                                                                                                                            |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_16<class_FileAccess_method_store_16>` **(** :ref:`int<class_int>` value **)**                                                                                                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_32<class_FileAccess_method_store_32>` **(** :ref:`int<class_int>` value **)**                                                                                                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_64<class_FileAccess_method_store_64>` **(** :ref:`int<class_int>` value **)**                                                                                                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_8<class_FileAccess_method_store_8>` **(** :ref:`int<class_int>` value **)**                                                                                                                                                                   |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_buffer<class_FileAccess_method_store_buffer>` **(** :ref:`PackedByteArray<class_PackedByteArray>` buffer **)**                                                                                                                                |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_csv_line<class_FileAccess_method_store_csv_line>` **(** :ref:`PackedStringArray<class_PackedStringArray>` values, :ref:`String<class_String>` delim="," **)**                                                                                 |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_double<class_FileAccess_method_store_double>` **(** :ref:`float<class_float>` value **)**                                                                                                                                                     |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_float<class_FileAccess_method_store_float>` **(** :ref:`float<class_float>` value **)**                                                                                                                                                       |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_line<class_FileAccess_method_store_line>` **(** :ref:`String<class_String>` line **)**                                                                                                                                                        |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_pascal_string<class_FileAccess_method_store_pascal_string>` **(** :ref:`String<class_String>` string **)**                                                                                                                                    |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_real<class_FileAccess_method_store_real>` **(** :ref:`float<class_float>` value **)**                                                                                                                                                         |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_string<class_FileAccess_method_store_string>` **(** :ref:`String<class_String>` string **)**                                                                                                                                                  |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`store_var<class_FileAccess_method_store_var>` **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` full_objects=false **)**                                                                                                           |
++---------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Enumerations
 Enumerations
 ------------
 ------------
 
 
-.. _enum_File_ModeFlags:
+.. _enum_FileAccess_ModeFlags:
 
 
-.. _class_File_constant_READ:
+.. _class_FileAccess_constant_READ:
 
 
-.. _class_File_constant_WRITE:
+.. _class_FileAccess_constant_WRITE:
 
 
-.. _class_File_constant_READ_WRITE:
+.. _class_FileAccess_constant_READ_WRITE:
 
 
-.. _class_File_constant_WRITE_READ:
+.. _class_FileAccess_constant_WRITE_READ:
 
 
 enum **ModeFlags**:
 enum **ModeFlags**:
 
 
@@ -200,15 +209,15 @@ enum **ModeFlags**:
 
 
 ----
 ----
 
 
-.. _enum_File_CompressionMode:
+.. _enum_FileAccess_CompressionMode:
 
 
-.. _class_File_constant_COMPRESSION_FASTLZ:
+.. _class_FileAccess_constant_COMPRESSION_FASTLZ:
 
 
-.. _class_File_constant_COMPRESSION_DEFLATE:
+.. _class_FileAccess_constant_COMPRESSION_DEFLATE:
 
 
-.. _class_File_constant_COMPRESSION_ZSTD:
+.. _class_FileAccess_constant_COMPRESSION_ZSTD:
 
 
-.. _class_File_constant_COMPRESSION_GZIP:
+.. _class_FileAccess_constant_COMPRESSION_GZIP:
 
 
 enum **CompressionMode**:
 enum **CompressionMode**:
 
 
@@ -223,36 +232,26 @@ enum **CompressionMode**:
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
 
 
-.. _class_File_property_big_endian:
+.. _class_FileAccess_property_big_endian:
 
 
 - :ref:`bool<class_bool>` **big_endian**
 - :ref:`bool<class_bool>` **big_endian**
 
 
-+-----------+-----------------------+
-| *Default* | ``false``             |
-+-----------+-----------------------+
-| *Setter*  | set_big_endian(value) |
-+-----------+-----------------------+
-| *Getter*  | is_big_endian()       |
-+-----------+-----------------------+
++----------+-----------------------+
+| *Setter* | set_big_endian(value) |
++----------+-----------------------+
+| *Getter* | is_big_endian()       |
++----------+-----------------------+
 
 
 If ``true``, the file is read with big-endian `endianness <https://en.wikipedia.org/wiki/Endianness>`__. If ``false``, the file is read with little-endian endianness. If in doubt, leave this to ``false`` as most files are written with little-endian endianness.
 If ``true``, the file is read with big-endian `endianness <https://en.wikipedia.org/wiki/Endianness>`__. If ``false``, the file is read with little-endian endianness. If in doubt, leave this to ``false`` as most files are written with little-endian endianness.
 
 
-\ **Note:** :ref:`big_endian<class_File_property_big_endian>` is only about the file format, not the CPU type. The CPU endianness doesn't affect the default endianness for files written.
+\ **Note:** :ref:`big_endian<class_FileAccess_property_big_endian>` is only about the file format, not the CPU type. The CPU endianness doesn't affect the default endianness for files written.
 
 
-\ **Note:** This is always reset to ``false`` whenever you open the file. Therefore, you must set :ref:`big_endian<class_File_property_big_endian>` *after* opening the file, not before.
+\ **Note:** This is always reset to ``false`` whenever you open the file. Therefore, you must set :ref:`big_endian<class_FileAccess_property_big_endian>` *after* opening the file, not before.
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
 
 
-.. _class_File_method_close:
-
-- void **close** **(** **)**
-
-Closes the currently opened file and prevents subsequent read/write operations. Use :ref:`flush<class_File_method_flush>` to persist the data to disk without closing the file.
-
-----
-
-.. _class_File_method_eof_reached:
+.. _class_FileAccess_method_eof_reached:
 
 
 - :ref:`bool<class_bool>` **eof_reached** **(** **)** |const|
 - :ref:`bool<class_bool>` **eof_reached** **(** **)** |const|
 
 
@@ -279,7 +278,7 @@ Returns ``true`` if the file cursor has already read past the end of the file.
 
 
 ----
 ----
 
 
-.. _class_File_method_file_exists:
+.. _class_FileAccess_method_file_exists:
 
 
 - :ref:`bool<class_bool>` **file_exists** **(** :ref:`String<class_String>` path **)** |static|
 - :ref:`bool<class_bool>` **file_exists** **(** :ref:`String<class_String>` path **)** |static|
 
 
@@ -287,51 +286,53 @@ Returns ``true`` if the file exists in the given path.
 
 
 \ **Note:** Many resources types are imported (e.g. textures or sound files), and their source asset will not be included in the exported game, as only the imported version is used. See :ref:`ResourceLoader.exists<class_ResourceLoader_method_exists>` for an alternative approach that takes resource remapping into account.
 \ **Note:** Many resources types are imported (e.g. textures or sound files), and their source asset will not be included in the exported game, as only the imported version is used. See :ref:`ResourceLoader.exists<class_ResourceLoader_method_exists>` for an alternative approach that takes resource remapping into account.
 
 
+For a non-static, relative equivalent, use :ref:`DirAccess.file_exists<class_DirAccess_method_file_exists>`.
+
 ----
 ----
 
 
-.. _class_File_method_flush:
+.. _class_FileAccess_method_flush:
 
 
 - void **flush** **(** **)**
 - void **flush** **(** **)**
 
 
-Writes the file's buffer to disk. Flushing is automatically performed when the file is closed. This means you don't need to call :ref:`flush<class_File_method_flush>` manually before closing a file using :ref:`close<class_File_method_close>`. Still, calling :ref:`flush<class_File_method_flush>` can be used to ensure the data is safe even if the project crashes instead of being closed gracefully.
+Writes the file's buffer to disk. Flushing is automatically performed when the file is closed. This means you don't need to call :ref:`flush<class_FileAccess_method_flush>` manually before closing a file. Still, calling :ref:`flush<class_FileAccess_method_flush>` can be used to ensure the data is safe even if the project crashes instead of being closed gracefully.
 
 
-\ **Note:** Only call :ref:`flush<class_File_method_flush>` when you actually need it. Otherwise, it will decrease performance due to constant disk writes.
+\ **Note:** Only call :ref:`flush<class_FileAccess_method_flush>` when you actually need it. Otherwise, it will decrease performance due to constant disk writes.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_16:
+.. _class_FileAccess_method_get_16:
 
 
 - :ref:`int<class_int>` **get_16** **(** **)** |const|
 - :ref:`int<class_int>` **get_16** **(** **)** |const|
 
 
-Returns the next 16 bits from the file as an integer. See :ref:`store_16<class_File_method_store_16>` for details on what values can be stored and retrieved this way.
+Returns the next 16 bits from the file as an integer. See :ref:`store_16<class_FileAccess_method_store_16>` for details on what values can be stored and retrieved this way.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_32:
+.. _class_FileAccess_method_get_32:
 
 
 - :ref:`int<class_int>` **get_32** **(** **)** |const|
 - :ref:`int<class_int>` **get_32** **(** **)** |const|
 
 
-Returns the next 32 bits from the file as an integer. See :ref:`store_32<class_File_method_store_32>` for details on what values can be stored and retrieved this way.
+Returns the next 32 bits from the file as an integer. See :ref:`store_32<class_FileAccess_method_store_32>` for details on what values can be stored and retrieved this way.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_64:
+.. _class_FileAccess_method_get_64:
 
 
 - :ref:`int<class_int>` **get_64** **(** **)** |const|
 - :ref:`int<class_int>` **get_64** **(** **)** |const|
 
 
-Returns the next 64 bits from the file as an integer. See :ref:`store_64<class_File_method_store_64>` for details on what values can be stored and retrieved this way.
+Returns the next 64 bits from the file as an integer. See :ref:`store_64<class_FileAccess_method_store_64>` for details on what values can be stored and retrieved this way.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_8:
+.. _class_FileAccess_method_get_8:
 
 
 - :ref:`int<class_int>` **get_8** **(** **)** |const|
 - :ref:`int<class_int>` **get_8** **(** **)** |const|
 
 
-Returns the next 8 bits from the file as an integer. See :ref:`store_8<class_File_method_store_8>` for details on what values can be stored and retrieved this way.
+Returns the next 8 bits from the file as an integer. See :ref:`store_8<class_FileAccess_method_store_8>` for details on what values can be stored and retrieved this way.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_as_text:
+.. _class_FileAccess_method_get_as_text:
 
 
 - :ref:`String<class_String>` **get_as_text** **(** :ref:`bool<class_bool>` skip_cr=false **)** |const|
 - :ref:`String<class_String>` **get_as_text** **(** :ref:`bool<class_bool>` skip_cr=false **)** |const|
 
 
@@ -341,7 +342,7 @@ If ``skip_cr`` is ``true``, carriage return characters (``\r``, CR) will be igno
 
 
 ----
 ----
 
 
-.. _class_File_method_get_buffer:
+.. _class_FileAccess_method_get_buffer:
 
 
 - :ref:`PackedByteArray<class_PackedByteArray>` **get_buffer** **(** :ref:`int<class_int>` length **)** |const|
 - :ref:`PackedByteArray<class_PackedByteArray>` **get_buffer** **(** :ref:`int<class_int>` length **)** |const|
 
 
@@ -349,7 +350,7 @@ Returns next ``length`` bytes of the file as a :ref:`PackedByteArray<class_Packe
 
 
 ----
 ----
 
 
-.. _class_File_method_get_csv_line:
+.. _class_FileAccess_method_get_csv_line:
 
 
 - :ref:`PackedStringArray<class_PackedStringArray>` **get_csv_line** **(** :ref:`String<class_String>` delim="," **)** |const|
 - :ref:`PackedStringArray<class_PackedStringArray>` **get_csv_line** **(** :ref:`String<class_String>` delim="," **)** |const|
 
 
@@ -369,7 +370,7 @@ Note how the second line can omit the enclosing quotes as it does not include th
 
 
 ----
 ----
 
 
-.. _class_File_method_get_double:
+.. _class_FileAccess_method_get_double:
 
 
 - :ref:`float<class_float>` **get_double** **(** **)** |const|
 - :ref:`float<class_float>` **get_double** **(** **)** |const|
 
 
@@ -377,7 +378,7 @@ Returns the next 64 bits from the file as a floating-point number.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_error:
+.. _class_FileAccess_method_get_error:
 
 
 - :ref:`Error<enum_@GlobalScope_Error>` **get_error** **(** **)** |const|
 - :ref:`Error<enum_@GlobalScope_Error>` **get_error** **(** **)** |const|
 
 
@@ -385,7 +386,7 @@ Returns the last error that happened when trying to perform operations. Compare
 
 
 ----
 ----
 
 
-.. _class_File_method_get_float:
+.. _class_FileAccess_method_get_float:
 
 
 - :ref:`float<class_float>` **get_float** **(** **)** |const|
 - :ref:`float<class_float>` **get_float** **(** **)** |const|
 
 
@@ -393,7 +394,7 @@ Returns the next 32 bits from the file as a floating-point number.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_length:
+.. _class_FileAccess_method_get_length:
 
 
 - :ref:`int<class_int>` **get_length** **(** **)** |const|
 - :ref:`int<class_int>` **get_length** **(** **)** |const|
 
 
@@ -401,7 +402,7 @@ Returns the size of the file in bytes.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_line:
+.. _class_FileAccess_method_get_line:
 
 
 - :ref:`String<class_String>` **get_line** **(** **)** |const|
 - :ref:`String<class_String>` **get_line** **(** **)** |const|
 
 
@@ -411,23 +412,31 @@ Text is interpreted as being UTF-8 encoded.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_md5:
+.. _class_FileAccess_method_get_md5:
 
 
-- :ref:`String<class_String>` **get_md5** **(** :ref:`String<class_String>` path **)** |const|
+- :ref:`String<class_String>` **get_md5** **(** :ref:`String<class_String>` path **)** |static|
 
 
 Returns an MD5 String representing the file at the given path or an empty :ref:`String<class_String>` on failure.
 Returns an MD5 String representing the file at the given path or an empty :ref:`String<class_String>` on failure.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_modified_time:
+.. _class_FileAccess_method_get_modified_time:
 
 
-- :ref:`int<class_int>` **get_modified_time** **(** :ref:`String<class_String>` file **)** |const|
+- :ref:`int<class_int>` **get_modified_time** **(** :ref:`String<class_String>` file **)** |static|
 
 
 Returns the last time the ``file`` was modified in Unix timestamp format or returns a :ref:`String<class_String>` "ERROR IN ``file``". This Unix timestamp can be converted to another format using the :ref:`Time<class_Time>` singleton.
 Returns the last time the ``file`` was modified in Unix timestamp format or returns a :ref:`String<class_String>` "ERROR IN ``file``". This Unix timestamp can be converted to another format using the :ref:`Time<class_Time>` singleton.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_pascal_string:
+.. _class_FileAccess_method_get_open_error:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **get_open_error** **(** **)** |static|
+
+Returns the result of the last :ref:`open<class_FileAccess_method_open>` call in the current thread.
+
+----
+
+.. _class_FileAccess_method_get_pascal_string:
 
 
 - :ref:`String<class_String>` **get_pascal_string** **(** **)**
 - :ref:`String<class_String>` **get_pascal_string** **(** **)**
 
 
@@ -437,7 +446,7 @@ Text is interpreted as being UTF-8 encoded.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_path:
+.. _class_FileAccess_method_get_path:
 
 
 - :ref:`String<class_String>` **get_path** **(** **)** |const|
 - :ref:`String<class_String>` **get_path** **(** **)** |const|
 
 
@@ -445,7 +454,7 @@ Returns the path as a :ref:`String<class_String>` for the current open file.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_path_absolute:
+.. _class_FileAccess_method_get_path_absolute:
 
 
 - :ref:`String<class_String>` **get_path_absolute** **(** **)** |const|
 - :ref:`String<class_String>` **get_path_absolute** **(** **)** |const|
 
 
@@ -453,7 +462,7 @@ Returns the absolute path as a :ref:`String<class_String>` for the current open
 
 
 ----
 ----
 
 
-.. _class_File_method_get_position:
+.. _class_FileAccess_method_get_position:
 
 
 - :ref:`int<class_int>` **get_position** **(** **)** |const|
 - :ref:`int<class_int>` **get_position** **(** **)** |const|
 
 
@@ -461,7 +470,7 @@ Returns the file cursor's position.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_real:
+.. _class_FileAccess_method_get_real:
 
 
 - :ref:`float<class_float>` **get_real** **(** **)** |const|
 - :ref:`float<class_float>` **get_real** **(** **)** |const|
 
 
@@ -469,15 +478,15 @@ Returns the next bits from the file as a floating-point number.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_sha256:
+.. _class_FileAccess_method_get_sha256:
 
 
-- :ref:`String<class_String>` **get_sha256** **(** :ref:`String<class_String>` path **)** |const|
+- :ref:`String<class_String>` **get_sha256** **(** :ref:`String<class_String>` path **)** |static|
 
 
 Returns a SHA-256 :ref:`String<class_String>` representing the file at the given path or an empty :ref:`String<class_String>` on failure.
 Returns a SHA-256 :ref:`String<class_String>` representing the file at the given path or an empty :ref:`String<class_String>` on failure.
 
 
 ----
 ----
 
 
-.. _class_File_method_get_var:
+.. _class_FileAccess_method_get_var:
 
 
 - :ref:`Variant<class_Variant>` **get_var** **(** :ref:`bool<class_bool>` allow_objects=false **)** |const|
 - :ref:`Variant<class_Variant>` **get_var** **(** :ref:`bool<class_bool>` allow_objects=false **)** |const|
 
 
@@ -487,7 +496,7 @@ Returns the next :ref:`Variant<class_Variant>` value from the file. If ``allow_o
 
 
 ----
 ----
 
 
-.. _class_File_method_is_open:
+.. _class_FileAccess_method_is_open:
 
 
 - :ref:`bool<class_bool>` **is_open** **(** **)** |const|
 - :ref:`bool<class_bool>` **is_open** **(** **)** |const|
 
 
@@ -495,43 +504,51 @@ Returns ``true`` if the file is currently opened.
 
 
 ----
 ----
 
 
-.. _class_File_method_open:
+.. _class_FileAccess_method_open:
+
+- :ref:`FileAccess<class_FileAccess>` **open** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` flags **)** |static|
 
 
-- :ref:`Error<enum_@GlobalScope_Error>` **open** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` flags **)**
+Creates a new ``FileAccess`` object and opens the file for writing or reading, depending on the flags.
 
 
-Opens the file for writing or reading, depending on the flags.
+Returns ``null`` if opening the file failed. You can use :ref:`get_open_error<class_FileAccess_method_get_open_error>` to check the error that occurred.
 
 
 ----
 ----
 
 
-.. _class_File_method_open_compressed:
+.. _class_FileAccess_method_open_compressed:
 
 
-- :ref:`Error<enum_@GlobalScope_Error>` **open_compressed** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` mode_flags, :ref:`CompressionMode<enum_File_CompressionMode>` compression_mode=0 **)**
+- :ref:`FileAccess<class_FileAccess>` **open_compressed** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` mode_flags, :ref:`CompressionMode<enum_FileAccess_CompressionMode>` compression_mode=0 **)** |static|
 
 
-Opens a compressed file for reading or writing.
+Creates a new ``FileAccess`` object and opens a compressed file for reading or writing.
 
 
-\ **Note:** :ref:`open_compressed<class_File_method_open_compressed>` can only read files that were saved by Godot, not third-party compression formats. See `GitHub issue #28999 <https://github.com/godotengine/godot/issues/28999>`__ for a workaround.
+\ **Note:** :ref:`open_compressed<class_FileAccess_method_open_compressed>` can only read files that were saved by Godot, not third-party compression formats. See `GitHub issue #28999 <https://github.com/godotengine/godot/issues/28999>`__ for a workaround.
+
+Returns ``null`` if opening the file failed. You can use :ref:`get_open_error<class_FileAccess_method_get_open_error>` to check the error that occurred.
 
 
 ----
 ----
 
 
-.. _class_File_method_open_encrypted:
+.. _class_FileAccess_method_open_encrypted:
 
 
-- :ref:`Error<enum_@GlobalScope_Error>` **open_encrypted** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` mode_flags, :ref:`PackedByteArray<class_PackedByteArray>` key **)**
+- :ref:`FileAccess<class_FileAccess>` **open_encrypted** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` mode_flags, :ref:`PackedByteArray<class_PackedByteArray>` key **)** |static|
 
 
-Opens an encrypted file in write or read mode. You need to pass a binary key to encrypt/decrypt it.
+Creates a new ``FileAccess`` object and opens an encrypted file in write or read mode. You need to pass a binary key to encrypt/decrypt it.
 
 
 \ **Note:** The provided key must be 32 bytes long.
 \ **Note:** The provided key must be 32 bytes long.
 
 
+Returns ``null`` if opening the file failed. You can use :ref:`get_open_error<class_FileAccess_method_get_open_error>` to check the error that occurred.
+
 ----
 ----
 
 
-.. _class_File_method_open_encrypted_with_pass:
+.. _class_FileAccess_method_open_encrypted_with_pass:
+
+- :ref:`FileAccess<class_FileAccess>` **open_encrypted_with_pass** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_FileAccess_ModeFlags>` mode_flags, :ref:`String<class_String>` pass **)** |static|
 
 
-- :ref:`Error<enum_@GlobalScope_Error>` **open_encrypted_with_pass** **(** :ref:`String<class_String>` path, :ref:`ModeFlags<enum_File_ModeFlags>` mode_flags, :ref:`String<class_String>` pass **)**
+Creates a new ``FileAccess`` object and opens an encrypted file in write or read mode. You need to pass a password to encrypt/decrypt it.
 
 
-Opens an encrypted file in write or read mode. You need to pass a password to encrypt/decrypt it.
+Returns ``null`` if opening the file failed. You can use :ref:`get_open_error<class_FileAccess_method_get_open_error>` to check the error that occurred.
 
 
 ----
 ----
 
 
-.. _class_File_method_seek:
+.. _class_FileAccess_method_seek:
 
 
 - void **seek** **(** :ref:`int<class_int>` position **)**
 - void **seek** **(** :ref:`int<class_int>` position **)**
 
 
@@ -539,7 +556,7 @@ Changes the file reading/writing cursor to the specified position (in bytes from
 
 
 ----
 ----
 
 
-.. _class_File_method_seek_end:
+.. _class_FileAccess_method_seek_end:
 
 
 - void **seek_end** **(** :ref:`int<class_int>` position=0 **)**
 - void **seek_end** **(** :ref:`int<class_int>` position=0 **)**
 
 
@@ -549,7 +566,7 @@ Changes the file reading/writing cursor to the specified position (in bytes from
 
 
 ----
 ----
 
 
-.. _class_File_method_store_16:
+.. _class_FileAccess_method_store_16:
 
 
 - void **store_16** **(** :ref:`int<class_int>` value **)**
 - void **store_16** **(** :ref:`int<class_int>` value **)**
 
 
@@ -557,7 +574,7 @@ Stores an integer as 16 bits in the file.
 
 
 \ **Note:** The ``value`` should lie in the interval ``[0, 2^16 - 1]``. Any other value will overflow and wrap around.
 \ **Note:** The ``value`` should lie in the interval ``[0, 2^16 - 1]``. Any other value will overflow and wrap around.
 
 
-To store a signed integer, use :ref:`store_64<class_File_method_store_64>` or store a signed integer from the interval ``[-2^15, 2^15 - 1]`` (i.e. keeping one bit for the signedness) and compute its sign manually when reading. For example:
+To store a signed integer, use :ref:`store_64<class_FileAccess_method_store_64>` or store a signed integer from the interval ``[-2^15, 2^15 - 1]`` (i.e. keeping one bit for the signedness) and compute its sign manually when reading. For example:
 
 
 
 
 .. tabs::
 .. tabs::
@@ -571,8 +588,7 @@ To store a signed integer, use :ref:`store_64<class_File_method_store_64>` or st
         return (unsigned + MAX_15B) % MAX_16B - MAX_15B
         return (unsigned + MAX_15B) % MAX_16B - MAX_15B
     
     
     func _ready():
     func _ready():
-        var f = File.new()
-        f.open("user://file.dat", File.WRITE_READ)
+        var f = FileAccess.open("user://file.dat", FileAccess.WRITE_READ)
         f.store_16(-42) # This wraps around and stores 65494 (2^16 - 42).
         f.store_16(-42) # This wraps around and stores 65494 (2^16 - 42).
         f.store_16(121) # In bounds, will store 121.
         f.store_16(121) # In bounds, will store 121.
         f.seek(0) # Go back to start to read the stored value.
         f.seek(0) # Go back to start to read the stored value.
@@ -585,8 +601,7 @@ To store a signed integer, use :ref:`store_64<class_File_method_store_64>` or st
 
 
     public override void _Ready()
     public override void _Ready()
     {
     {
-        var f = new File();
-        f.Open("user://file.dat", File.ModeFlags.WriteRead);
+        using var f = FileAccess.Open("user://file.dat", FileAccess.ModeFlags.WriteRead);
         f.Store16(unchecked((ushort)-42)); // This wraps around and stores 65494 (2^16 - 42).
         f.Store16(unchecked((ushort)-42)); // This wraps around and stores 65494 (2^16 - 42).
         f.Store16(121); // In bounds, will store 121.
         f.Store16(121); // In bounds, will store 121.
         f.Seek(0); // Go back to start to read the stored value.
         f.Seek(0); // Go back to start to read the stored value.
@@ -600,7 +615,7 @@ To store a signed integer, use :ref:`store_64<class_File_method_store_64>` or st
 
 
 ----
 ----
 
 
-.. _class_File_method_store_32:
+.. _class_FileAccess_method_store_32:
 
 
 - void **store_32** **(** :ref:`int<class_int>` value **)**
 - void **store_32** **(** :ref:`int<class_int>` value **)**
 
 
@@ -608,11 +623,11 @@ Stores an integer as 32 bits in the file.
 
 
 \ **Note:** The ``value`` should lie in the interval ``[0, 2^32 - 1]``. Any other value will overflow and wrap around.
 \ **Note:** The ``value`` should lie in the interval ``[0, 2^32 - 1]``. Any other value will overflow and wrap around.
 
 
-To store a signed integer, use :ref:`store_64<class_File_method_store_64>`, or convert it manually (see :ref:`store_16<class_File_method_store_16>` for an example).
+To store a signed integer, use :ref:`store_64<class_FileAccess_method_store_64>`, or convert it manually (see :ref:`store_16<class_FileAccess_method_store_16>` for an example).
 
 
 ----
 ----
 
 
-.. _class_File_method_store_64:
+.. _class_FileAccess_method_store_64:
 
 
 - void **store_64** **(** :ref:`int<class_int>` value **)**
 - void **store_64** **(** :ref:`int<class_int>` value **)**
 
 
@@ -622,7 +637,7 @@ Stores an integer as 64 bits in the file.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_8:
+.. _class_FileAccess_method_store_8:
 
 
 - void **store_8** **(** :ref:`int<class_int>` value **)**
 - void **store_8** **(** :ref:`int<class_int>` value **)**
 
 
@@ -630,11 +645,11 @@ Stores an integer as 8 bits in the file.
 
 
 \ **Note:** The ``value`` should lie in the interval ``[0, 255]``. Any other value will overflow and wrap around.
 \ **Note:** The ``value`` should lie in the interval ``[0, 255]``. Any other value will overflow and wrap around.
 
 
-To store a signed integer, use :ref:`store_64<class_File_method_store_64>`, or convert it manually (see :ref:`store_16<class_File_method_store_16>` for an example).
+To store a signed integer, use :ref:`store_64<class_FileAccess_method_store_64>`, or convert it manually (see :ref:`store_16<class_FileAccess_method_store_16>` for an example).
 
 
 ----
 ----
 
 
-.. _class_File_method_store_buffer:
+.. _class_FileAccess_method_store_buffer:
 
 
 - void **store_buffer** **(** :ref:`PackedByteArray<class_PackedByteArray>` buffer **)**
 - void **store_buffer** **(** :ref:`PackedByteArray<class_PackedByteArray>` buffer **)**
 
 
@@ -642,7 +657,7 @@ Stores the given array of bytes in the file.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_csv_line:
+.. _class_FileAccess_method_store_csv_line:
 
 
 - void **store_csv_line** **(** :ref:`PackedStringArray<class_PackedStringArray>` values, :ref:`String<class_String>` delim="," **)**
 - void **store_csv_line** **(** :ref:`PackedStringArray<class_PackedStringArray>` values, :ref:`String<class_String>` delim="," **)**
 
 
@@ -652,7 +667,7 @@ Text will be encoded as UTF-8.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_double:
+.. _class_FileAccess_method_store_double:
 
 
 - void **store_double** **(** :ref:`float<class_float>` value **)**
 - void **store_double** **(** :ref:`float<class_float>` value **)**
 
 
@@ -660,7 +675,7 @@ Stores a floating-point number as 64 bits in the file.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_float:
+.. _class_FileAccess_method_store_float:
 
 
 - void **store_float** **(** :ref:`float<class_float>` value **)**
 - void **store_float** **(** :ref:`float<class_float>` value **)**
 
 
@@ -668,7 +683,7 @@ Stores a floating-point number as 32 bits in the file.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_line:
+.. _class_FileAccess_method_store_line:
 
 
 - void **store_line** **(** :ref:`String<class_String>` line **)**
 - void **store_line** **(** :ref:`String<class_String>` line **)**
 
 
@@ -676,7 +691,7 @@ Appends ``line`` to the file followed by a line return character (``\n``), encod
 
 
 ----
 ----
 
 
-.. _class_File_method_store_pascal_string:
+.. _class_FileAccess_method_store_pascal_string:
 
 
 - void **store_pascal_string** **(** :ref:`String<class_String>` string **)**
 - void **store_pascal_string** **(** :ref:`String<class_String>` string **)**
 
 
@@ -686,7 +701,7 @@ Text will be encoded as UTF-8.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_real:
+.. _class_FileAccess_method_store_real:
 
 
 - void **store_real** **(** :ref:`float<class_float>` value **)**
 - void **store_real** **(** :ref:`float<class_float>` value **)**
 
 
@@ -694,17 +709,17 @@ Stores a floating-point number in the file.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_string:
+.. _class_FileAccess_method_store_string:
 
 
 - void **store_string** **(** :ref:`String<class_String>` string **)**
 - void **store_string** **(** :ref:`String<class_String>` string **)**
 
 
 Appends ``string`` to the file without a line return, encoding the text as UTF-8.
 Appends ``string`` to the file without a line return, encoding the text as UTF-8.
 
 
-\ **Note:** This method is intended to be used to write text files. The string is stored as a UTF-8 encoded buffer without string length or terminating zero, which means that it can't be loaded back easily. If you want to store a retrievable string in a binary file, consider using :ref:`store_pascal_string<class_File_method_store_pascal_string>` instead. For retrieving strings from a text file, you can use ``get_buffer(length).get_string_from_utf8()`` (if you know the length) or :ref:`get_as_text<class_File_method_get_as_text>`.
+\ **Note:** This method is intended to be used to write text files. The string is stored as a UTF-8 encoded buffer without string length or terminating zero, which means that it can't be loaded back easily. If you want to store a retrievable string in a binary file, consider using :ref:`store_pascal_string<class_FileAccess_method_store_pascal_string>` instead. For retrieving strings from a text file, you can use ``get_buffer(length).get_string_from_utf8()`` (if you know the length) or :ref:`get_as_text<class_FileAccess_method_get_as_text>`.
 
 
 ----
 ----
 
 
-.. _class_File_method_store_var:
+.. _class_FileAccess_method_store_var:
 
 
 - void **store_var** **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` full_objects=false **)**
 - void **store_var** **(** :ref:`Variant<class_Variant>` value, :ref:`bool<class_bool>` full_objects=false **)**
 
 

+ 1 - 1
classes/class_filesystemdock.rst

@@ -44,7 +44,7 @@ Signals
 
 
 .. _class_FileSystemDock_signal_folder_moved:
 .. _class_FileSystemDock_signal_folder_moved:
 
 
-- **folder_moved** **(** :ref:`String<class_String>` old_folder, :ref:`String<class_String>` new_file **)**
+- **folder_moved** **(** :ref:`String<class_String>` old_folder, :ref:`String<class_String>` new_folder **)**
 
 
 ----
 ----
 
 

+ 8 - 6
classes/class_fogmaterial.rst

@@ -19,6 +19,8 @@ Description
 
 
 A :ref:`Material<class_Material>` resource that can be used by :ref:`FogVolume<class_FogVolume>`\ s to draw volumetric effects.
 A :ref:`Material<class_Material>` resource that can be used by :ref:`FogVolume<class_FogVolume>`\ s to draw volumetric effects.
 
 
+If you need more advanced effects, use a custom :doc:`fog shader <../tutorials/shaders/shader_reference/fog_shader>`.
+
 Properties
 Properties
 ----------
 ----------
 
 
@@ -51,7 +53,7 @@ Property Descriptions
 | *Getter*  | get_albedo()          |
 | *Getter*  | get_albedo()          |
 +-----------+-----------------------+
 +-----------+-----------------------+
 
 
-Sets the single-scattering :ref:`Color<class_Color>` of the :ref:`FogVolume<class_FogVolume>`. Internally :ref:`albedo<class_FogMaterial_property_albedo>` is converted into single-scattering which is additively blended with other :ref:`FogVolume<class_FogVolume>`\ s and the :ref:`Environment.volumetric_fog_albedo<class_Environment_property_volumetric_fog_albedo>`.
+The single-scattering :ref:`Color<class_Color>` of the :ref:`FogVolume<class_FogVolume>`. Internally, :ref:`albedo<class_FogMaterial_property_albedo>` is converted into single-scattering, which is additively blended with other :ref:`FogVolume<class_FogVolume>`\ s and the :ref:`Environment.volumetric_fog_albedo<class_Environment_property_volumetric_fog_albedo>`.
 
 
 ----
 ----
 
 
@@ -67,7 +69,7 @@ Sets the single-scattering :ref:`Color<class_Color>` of the :ref:`FogVolume<clas
 | *Getter*  | get_density()      |
 | *Getter*  | get_density()      |
 +-----------+--------------------+
 +-----------+--------------------+
 
 
-Sets the density of the :ref:`FogVolume<class_FogVolume>`. Denser objects are more opaque, but may suffer from under-sampling artifacts that look like stripes.
+The density of the :ref:`FogVolume<class_FogVolume>`. Denser objects are more opaque, but may suffer from under-sampling artifacts that look like stripes. Negative values can be used to subtract fog from other :ref:`FogVolume<class_FogVolume>`\ s or global volumetric fog.
 
 
 ----
 ----
 
 
@@ -81,7 +83,7 @@ Sets the density of the :ref:`FogVolume<class_FogVolume>`. Denser objects are mo
 | *Getter* | get_density_texture()      |
 | *Getter* | get_density_texture()      |
 +----------+----------------------------+
 +----------+----------------------------+
 
 
-Sets a 3D texture that is used to scale the :ref:`density<class_FogMaterial_property_density>` of the :ref:`FogVolume<class_FogVolume>`.
+The 3D texture that is used to scale the :ref:`density<class_FogMaterial_property_density>` of the :ref:`FogVolume<class_FogVolume>`. This can be used to vary fog density within the :ref:`FogVolume<class_FogVolume>` with any kind of static pattern. For animated effects, consider using a custom :doc:`fog shader <../tutorials/shaders/shader_reference/fog_shader>`.
 
 
 ----
 ----
 
 
@@ -97,7 +99,7 @@ Sets a 3D texture that is used to scale the :ref:`density<class_FogMaterial_prop
 | *Getter*  | get_edge_fade()      |
 | *Getter*  | get_edge_fade()      |
 +-----------+----------------------+
 +-----------+----------------------+
 
 
-Sets the hardness of the edges of the :ref:`FogVolume<class_FogVolume>`. A higher number will result in softer edges while a lower number will result in harder edges.
+The hardness of the edges of the :ref:`FogVolume<class_FogVolume>`. A higher value will result in softer edges, while a lower value will result in harder edges.
 
 
 ----
 ----
 
 
@@ -113,7 +115,7 @@ Sets the hardness of the edges of the :ref:`FogVolume<class_FogVolume>`. A highe
 | *Getter*  | get_emission()        |
 | *Getter*  | get_emission()        |
 +-----------+-----------------------+
 +-----------+-----------------------+
 
 
-Sets the :ref:`Color<class_Color>` of the light emitted by the :ref:`FogVolume<class_FogVolume>`. Emitted light will not cast light or shadows on other objects, but can be useful for modulating the :ref:`Color<class_Color>` of the :ref:`FogVolume<class_FogVolume>` independently from light sources.
+The :ref:`Color<class_Color>` of the light emitted by the :ref:`FogVolume<class_FogVolume>`. Emitted light will not cast light or shadows on other objects, but can be useful for modulating the :ref:`Color<class_Color>` of the :ref:`FogVolume<class_FogVolume>` independently from light sources.
 
 
 ----
 ----
 
 
@@ -129,7 +131,7 @@ Sets the :ref:`Color<class_Color>` of the light emitted by the :ref:`FogVolume<c
 | *Getter*  | get_height_falloff()      |
 | *Getter*  | get_height_falloff()      |
 +-----------+---------------------------+
 +-----------+---------------------------+
 
 
-Sets the rate by which the height-based fog decreases in density as height increases in world space. A high falloff will result in a sharp transition, while a low falloff will result in a smoother transition. A value of ``0`` results in uniform-density fog. The height threshold is determined by the height of the associated :ref:`FogVolume<class_FogVolume>`.
+The rate by which the height-based fog decreases in density as height increases in world space. A high falloff will result in a sharp transition, while a low falloff will result in a smoother transition. A value of ``0.0`` results in uniform-density fog. The height threshold is determined by the height of the associated :ref:`FogVolume<class_FogVolume>`.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 6 - 4
classes/class_fogvolume.rst

@@ -17,10 +17,12 @@ A node used to add local fog with the volumetric fog effect.
 Description
 Description
 -----------
 -----------
 
 
-``FogVolume``\ s are used to add localized fog into the global volumetric fog effect.
+``FogVolume``\ s are used to add localized fog into the global volumetric fog effect. ``FogVolume``\ s can also remove volumetric fog from specific areas if using a :ref:`FogMaterial<class_FogMaterial>` with a negative :ref:`FogMaterial.density<class_FogMaterial_property_density>`.
 
 
 Performance of ``FogVolume``\ s is directly related to their relative size on the screen and the complexity of their attached :ref:`FogMaterial<class_FogMaterial>`. It is best to keep ``FogVolume``\ s relatively small and simple where possible.
 Performance of ``FogVolume``\ s is directly related to their relative size on the screen and the complexity of their attached :ref:`FogMaterial<class_FogMaterial>`. It is best to keep ``FogVolume``\ s relatively small and simple where possible.
 
 
+\ **Note:** ``FogVolume``\ s only have a visible effect if :ref:`Environment.volumetric_fog_enabled<class_Environment_property_volumetric_fog_enabled>` is ``true``. If you don't want fog to be globally visible (but only within ``FogVolume`` nodes), set :ref:`Environment.volumetric_fog_density<class_Environment_property_volumetric_fog_density>` to ``0.0``.
+
 Properties
 Properties
 ----------
 ----------
 
 
@@ -47,7 +49,7 @@ Property Descriptions
 | *Getter*  | get_extents()        |
 | *Getter*  | get_extents()        |
 +-----------+----------------------+
 +-----------+----------------------+
 
 
-Sets the size of the ``FogVolume`` when :ref:`shape<class_FogVolume_property_shape>` is :ref:`RenderingServer.FOG_VOLUME_SHAPE_ELLIPSOID<class_RenderingServer_constant_FOG_VOLUME_SHAPE_ELLIPSOID>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CONE<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CONE>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CYLINDER<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CYLINDER>` or :ref:`RenderingServer.FOG_VOLUME_SHAPE_BOX<class_RenderingServer_constant_FOG_VOLUME_SHAPE_BOX>`.
+The size of the ``FogVolume`` when :ref:`shape<class_FogVolume_property_shape>` is :ref:`RenderingServer.FOG_VOLUME_SHAPE_ELLIPSOID<class_RenderingServer_constant_FOG_VOLUME_SHAPE_ELLIPSOID>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CONE<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CONE>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CYLINDER<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CYLINDER>` or :ref:`RenderingServer.FOG_VOLUME_SHAPE_BOX<class_RenderingServer_constant_FOG_VOLUME_SHAPE_BOX>`.
 
 
 \ **Note:** Thin fog volumes may appear to flicker when the camera moves or rotates. This can be alleviated by increasing :ref:`ProjectSettings.rendering/environment/volumetric_fog/volume_depth<class_ProjectSettings_property_rendering/environment/volumetric_fog/volume_depth>` (at a performance cost) or by decreasing :ref:`Environment.volumetric_fog_length<class_Environment_property_volumetric_fog_length>` (at no performance cost, but at the cost of lower fog range). Alternatively, the ``FogVolume`` can be made thicker and use a lower density in the :ref:`material<class_FogVolume_property_material>`.
 \ **Note:** Thin fog volumes may appear to flicker when the camera moves or rotates. This can be alleviated by increasing :ref:`ProjectSettings.rendering/environment/volumetric_fog/volume_depth<class_ProjectSettings_property_rendering/environment/volumetric_fog/volume_depth>` (at a performance cost) or by decreasing :ref:`Environment.volumetric_fog_length<class_Environment_property_volumetric_fog_length>` (at no performance cost, but at the cost of lower fog range). Alternatively, the ``FogVolume`` can be made thicker and use a lower density in the :ref:`material<class_FogVolume_property_material>`.
 
 
@@ -65,7 +67,7 @@ Sets the size of the ``FogVolume`` when :ref:`shape<class_FogVolume_property_sha
 | *Getter* | get_material()      |
 | *Getter* | get_material()      |
 +----------+---------------------+
 +----------+---------------------+
 
 
-Sets the :ref:`Material<class_Material>` to be used by the ``FogVolume``. Can be either a :ref:`FogMaterial<class_FogMaterial>` or a custom :ref:`ShaderMaterial<class_ShaderMaterial>`.
+The :ref:`Material<class_Material>` used by the ``FogVolume``. Can be either a built-in :ref:`FogMaterial<class_FogMaterial>` or a custom :ref:`ShaderMaterial<class_ShaderMaterial>`.
 
 
 ----
 ----
 
 
@@ -81,7 +83,7 @@ Sets the :ref:`Material<class_Material>` to be used by the ``FogVolume``. Can be
 | *Getter*  | get_shape()      |
 | *Getter*  | get_shape()      |
 +-----------+------------------+
 +-----------+------------------+
 
 
-Sets the shape of the ``FogVolume`` to either :ref:`RenderingServer.FOG_VOLUME_SHAPE_ELLIPSOID<class_RenderingServer_constant_FOG_VOLUME_SHAPE_ELLIPSOID>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CONE<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CONE>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CYLINDER<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CYLINDER>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_BOX<class_RenderingServer_constant_FOG_VOLUME_SHAPE_BOX>` or :ref:`RenderingServer.FOG_VOLUME_SHAPE_WORLD<class_RenderingServer_constant_FOG_VOLUME_SHAPE_WORLD>`.
+The shape of the ``FogVolume``. This can be set to either :ref:`RenderingServer.FOG_VOLUME_SHAPE_ELLIPSOID<class_RenderingServer_constant_FOG_VOLUME_SHAPE_ELLIPSOID>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CONE<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CONE>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_CYLINDER<class_RenderingServer_constant_FOG_VOLUME_SHAPE_CYLINDER>`, :ref:`RenderingServer.FOG_VOLUME_SHAPE_BOX<class_RenderingServer_constant_FOG_VOLUME_SHAPE_BOX>` or :ref:`RenderingServer.FOG_VOLUME_SHAPE_WORLD<class_RenderingServer_constant_FOG_VOLUME_SHAPE_WORLD>`.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 11 - 1
classes/class_font.rst

@@ -281,10 +281,20 @@ Returns the size of a bounding box of a single-line string, taking kerning and a
 
 
 For example, to get the string size as displayed by a single-line Label, use:
 For example, to get the string size as displayed by a single-line Label, use:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     var string_size = $Label.get_theme_font("font").get_string_size($Label.text, HORIZONTAL_ALIGNMENT_LEFT, -1, $Label.get_theme_font_size("font_size"))
     var string_size = $Label.get_theme_font("font").get_string_size($Label.text, HORIZONTAL_ALIGNMENT_LEFT, -1, $Label.get_theme_font_size("font_size"))
 
 
+ .. code-tab:: csharp
+
+    Label label = GetNode<Label>("Label");
+    Vector2 stringSize = label.GetThemeFont("font").GetStringSize(label.Text, HorizontalAlignment.Left, -1, label.GetThemeFontSize("font_size"));
+
+
+
 \ **Note:** Real height of the string is context-dependent and can be significantly different from the value returned by :ref:`get_height<class_Font_method_get_height>`.
 \ **Note:** Real height of the string is context-dependent and can be significantly different from the value returned by :ref:`get_height<class_Font_method_get_height>`.
 
 
 ----
 ----

+ 11 - 1
classes/class_geometry2d.rst

@@ -29,6 +29,8 @@ Methods
 +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`PackedVector2Array<class_PackedVector2Array>`   | :ref:`convex_hull<class_Geometry2D_method_convex_hull>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` points **)**                                                                                                                                                                       |
 | :ref:`PackedVector2Array<class_PackedVector2Array>`   | :ref:`convex_hull<class_Geometry2D_method_convex_hull>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` points **)**                                                                                                                                                                       |
 +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedVector2Array[]<class_PackedVector2Array>` | :ref:`decompose_polygon_in_convex<class_Geometry2D_method_decompose_polygon_in_convex>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` polygon **)**                                                                                                                                      |
++-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`PackedVector2Array[]<class_PackedVector2Array>` | :ref:`exclude_polygons<class_Geometry2D_method_exclude_polygons>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_a, :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_b **)**                                                                                           |
 | :ref:`PackedVector2Array[]<class_PackedVector2Array>` | :ref:`exclude_polygons<class_Geometry2D_method_exclude_polygons>` **(** :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_a, :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_b **)**                                                                                           |
 +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Vector2<class_Vector2>`                         | :ref:`get_closest_point_to_segment<class_Geometry2D_method_get_closest_point_to_segment>` **(** :ref:`Vector2<class_Vector2>` point, :ref:`Vector2<class_Vector2>` s1, :ref:`Vector2<class_Vector2>` s2 **)**                                                                                        |
 | :ref:`Vector2<class_Vector2>`                         | :ref:`get_closest_point_to_segment<class_Geometry2D_method_get_closest_point_to_segment>` **(** :ref:`Vector2<class_Vector2>` point, :ref:`Vector2<class_Vector2>` s1, :ref:`Vector2<class_Vector2>` s2 **)**                                                                                        |
@@ -164,6 +166,14 @@ Given an array of :ref:`Vector2<class_Vector2>`\ s, returns the convex hull as a
 
 
 ----
 ----
 
 
+.. _class_Geometry2D_method_decompose_polygon_in_convex:
+
+- :ref:`PackedVector2Array[]<class_PackedVector2Array>` **decompose_polygon_in_convex** **(** :ref:`PackedVector2Array<class_PackedVector2Array>` polygon **)**
+
+Decomposes the ``polygon`` into multiple convex hulls and returns an array of :ref:`PackedVector2Array<class_PackedVector2Array>`.
+
+----
+
 .. _class_Geometry2D_method_exclude_polygons:
 .. _class_Geometry2D_method_exclude_polygons:
 
 
 - :ref:`PackedVector2Array[]<class_PackedVector2Array>` **exclude_polygons** **(** :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_a, :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_b **)**
 - :ref:`PackedVector2Array[]<class_PackedVector2Array>` **exclude_polygons** **(** :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_a, :ref:`PackedVector2Array<class_PackedVector2Array>` polygon_b **)**
@@ -254,7 +264,7 @@ Checks if the two lines (``from_a``, ``dir_a``) and (``from_b``, ``dir_b``) inte
 
 
 - :ref:`Dictionary<class_Dictionary>` **make_atlas** **(** :ref:`PackedVector2Array<class_PackedVector2Array>` sizes **)**
 - :ref:`Dictionary<class_Dictionary>` **make_atlas** **(** :ref:`PackedVector2Array<class_PackedVector2Array>` sizes **)**
 
 
-Given an array of :ref:`Vector2<class_Vector2>`\ s representing tiles, builds an atlas. The returned dictionary has two keys: ``points`` is an array of :ref:`Vector2<class_Vector2>` that specifies the positions of each tile, ``size`` contains the overall size of the whole atlas as :ref:`Vector2<class_Vector2>`.
+Given an array of :ref:`Vector2<class_Vector2>`\ s representing tiles, builds an atlas. The returned dictionary has two keys: ``points`` is a :ref:`PackedVector2Array<class_PackedVector2Array>` that specifies the positions of each tile, ``size`` contains the overall size of the whole atlas as :ref:`Vector2i<class_Vector2i>`.
 
 
 ----
 ----
 
 

+ 30 - 15
classes/class_gltfdocumentextension.rst

@@ -14,26 +14,33 @@ GLTFDocumentExtension
 
 
 **Inherited By:** :ref:`GLTFDocumentExtensionConvertImporterMesh<class_GLTFDocumentExtensionConvertImporterMesh>`
 **Inherited By:** :ref:`GLTFDocumentExtensionConvertImporterMesh<class_GLTFDocumentExtensionConvertImporterMesh>`
 
 
+:ref:`GLTFDocument<class_GLTFDocument>` extension class.
 
 
+Description
+-----------
+
+Extends the functionality of the :ref:`GLTFDocument<class_GLTFDocument>` class by allowing you to run arbitrary code at various stages of GLTF import or export.
 
 
 Methods
 Methods
 -------
 -------
 
 
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_export_node<class_GLTFDocumentExtension_method__export_node>` **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`GLTFNode<class_GLTFNode>` gltf_node, :ref:`Dictionary<class_Dictionary>` json, :ref:`Node<class_Node>` node **)** |virtual| |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_export_post<class_GLTFDocumentExtension_method__export_post>` **(** :ref:`GLTFState<class_GLTFState>` state **)** |virtual|                                                                                                                    |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_export_preflight<class_GLTFDocumentExtension_method__export_preflight>` **(** :ref:`Node<class_Node>` root **)** |virtual|                                                                                                                     |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_import_node<class_GLTFDocumentExtension_method__import_node>` **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`GLTFNode<class_GLTFNode>` gltf_node, :ref:`Dictionary<class_Dictionary>` json, :ref:`Node<class_Node>` node **)** |virtual| |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_import_post<class_GLTFDocumentExtension_method__import_post>` **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`Node<class_Node>` root **)** |virtual|                                                                                      |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_import_post_parse<class_GLTFDocumentExtension_method__import_post_parse>` **(** :ref:`GLTFState<class_GLTFState>` state **)** |virtual|                                                                                                        |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>` | :ref:`_import_preflight<class_GLTFDocumentExtension_method__import_preflight>` **(** :ref:`GLTFState<class_GLTFState>` state **)** |virtual|                                                                                                          |
-+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_export_node<class_GLTFDocumentExtension_method__export_node>` **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`GLTFNode<class_GLTFNode>` gltf_node, :ref:`Dictionary<class_Dictionary>` json, :ref:`Node<class_Node>` node **)** |virtual| |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_export_post<class_GLTFDocumentExtension_method__export_post>` **(** :ref:`GLTFState<class_GLTFState>` state **)** |virtual|                                                                                                                    |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_export_preflight<class_GLTFDocumentExtension_method__export_preflight>` **(** :ref:`Node<class_Node>` root **)** |virtual|                                                                                                                     |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`_get_supported_extensions<class_GLTFDocumentExtension_method__get_supported_extensions>` **(** **)** |virtual|                                                                                                                                  |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_import_node<class_GLTFDocumentExtension_method__import_node>` **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`GLTFNode<class_GLTFNode>` gltf_node, :ref:`Dictionary<class_Dictionary>` json, :ref:`Node<class_Node>` node **)** |virtual| |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_import_post<class_GLTFDocumentExtension_method__import_post>` **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`Node<class_Node>` root **)** |virtual|                                                                                      |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_import_post_parse<class_GLTFDocumentExtension_method__import_post_parse>` **(** :ref:`GLTFState<class_GLTFState>` state **)** |virtual|                                                                                                        |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                             | :ref:`_import_preflight<class_GLTFDocumentExtension_method__import_preflight>` **(** :ref:`GLTFState<class_GLTFState>` state **)** |virtual|                                                                                                          |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
@@ -56,6 +63,14 @@ Method Descriptions
 
 
 ----
 ----
 
 
+.. _class_GLTFDocumentExtension_method__get_supported_extensions:
+
+- :ref:`PackedStringArray<class_PackedStringArray>` **_get_supported_extensions** **(** **)** |virtual|
+
+Returns an array of the GLTF extensions supported by this GLTFDocumentExtension class. This is used to validate if a GLTF file with required extensions can be loaded.
+
+----
+
 .. _class_GLTFDocumentExtension_method__import_node:
 .. _class_GLTFDocumentExtension_method__import_node:
 
 
 - :ref:`int<class_int>` **_import_node** **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`GLTFNode<class_GLTFNode>` gltf_node, :ref:`Dictionary<class_Dictionary>` json, :ref:`Node<class_Node>` node **)** |virtual|
 - :ref:`int<class_int>` **_import_node** **(** :ref:`GLTFState<class_GLTFState>` state, :ref:`GLTFNode<class_GLTFNode>` gltf_node, :ref:`Dictionary<class_Dictionary>` json, :ref:`Node<class_Node>` node **)** |virtual|

+ 10 - 0
classes/class_gltfnode.rst

@@ -12,7 +12,17 @@ GLTFNode
 
 
 **Inherits:** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 **Inherits:** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 
 
+GLTF node class.
 
 
+Description
+-----------
+
+Represents a GLTF node. GLTF nodes may have names, transforms, children (other GLTF nodes), and more specialized properties (represented by their own classes).
+
+Tutorials
+---------
+
+- `GLTF scene and node spec <https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_004_ScenesNodes.md">`__
 
 
 Properties
 Properties
 ----------
 ----------

+ 97 - 67
classes/class_gltfstate.rst

@@ -42,73 +42,79 @@ Properties
 Methods
 Methods
 -------
 -------
 
 
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFAccessor[]<class_GLTFAccessor>`     | :ref:`get_accessors<class_GLTFState_method_get_accessors>` **(** **)**                                                                                |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`AnimationPlayer<class_AnimationPlayer>` | :ref:`get_animation_player<class_GLTFState_method_get_animation_player>` **(** :ref:`int<class_int>` idx **)**                                        |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`int<class_int>`                         | :ref:`get_animation_players_count<class_GLTFState_method_get_animation_players_count>` **(** :ref:`int<class_int>` idx **)**                          |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFAnimation[]<class_GLTFAnimation>`   | :ref:`get_animations<class_GLTFState_method_get_animations>` **(** **)**                                                                              |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFBufferView[]<class_GLTFBufferView>` | :ref:`get_buffer_views<class_GLTFState_method_get_buffer_views>` **(** **)**                                                                          |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFCamera[]<class_GLTFCamera>`         | :ref:`get_cameras<class_GLTFState_method_get_cameras>` **(** **)**                                                                                    |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Texture2D[]<class_Texture2D>`           | :ref:`get_images<class_GLTFState_method_get_images>` **(** **)**                                                                                      |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFLight[]<class_GLTFLight>`           | :ref:`get_lights<class_GLTFState_method_get_lights>` **(** **)**                                                                                      |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`BaseMaterial3D[]<class_BaseMaterial3D>` | :ref:`get_materials<class_GLTFState_method_get_materials>` **(** **)**                                                                                |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFMesh[]<class_GLTFMesh>`             | :ref:`get_meshes<class_GLTFState_method_get_meshes>` **(** **)**                                                                                      |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFNode[]<class_GLTFNode>`             | :ref:`get_nodes<class_GLTFState_method_get_nodes>` **(** **)**                                                                                        |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Node<class_Node>`                       | :ref:`get_scene_node<class_GLTFState_method_get_scene_node>` **(** :ref:`int<class_int>` idx **)**                                                    |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Dictionary<class_Dictionary>`           | :ref:`get_skeleton_to_node<class_GLTFState_method_get_skeleton_to_node>` **(** **)**                                                                  |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFSkeleton[]<class_GLTFSkeleton>`     | :ref:`get_skeletons<class_GLTFState_method_get_skeletons>` **(** **)**                                                                                |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFSkin[]<class_GLTFSkin>`             | :ref:`get_skins<class_GLTFState_method_get_skins>` **(** **)**                                                                                        |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`GLTFTexture[]<class_GLTFTexture>`       | :ref:`get_textures<class_GLTFState_method_get_textures>` **(** **)**                                                                                  |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String[]<class_String>`                 | :ref:`get_unique_animation_names<class_GLTFState_method_get_unique_animation_names>` **(** **)**                                                      |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`String[]<class_String>`                 | :ref:`get_unique_names<class_GLTFState_method_get_unique_names>` **(** **)**                                                                          |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_accessors<class_GLTFState_method_set_accessors>` **(** :ref:`GLTFAccessor[]<class_GLTFAccessor>` accessors **)**                            |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_animations<class_GLTFState_method_set_animations>` **(** :ref:`GLTFAnimation[]<class_GLTFAnimation>` animations **)**                       |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_buffer_views<class_GLTFState_method_set_buffer_views>` **(** :ref:`GLTFBufferView[]<class_GLTFBufferView>` buffer_views **)**               |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_cameras<class_GLTFState_method_set_cameras>` **(** :ref:`GLTFCamera[]<class_GLTFCamera>` cameras **)**                                      |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_images<class_GLTFState_method_set_images>` **(** :ref:`Texture2D[]<class_Texture2D>` images **)**                                           |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_lights<class_GLTFState_method_set_lights>` **(** :ref:`GLTFLight[]<class_GLTFLight>` lights **)**                                           |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_materials<class_GLTFState_method_set_materials>` **(** :ref:`BaseMaterial3D[]<class_BaseMaterial3D>` materials **)**                        |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_meshes<class_GLTFState_method_set_meshes>` **(** :ref:`GLTFMesh[]<class_GLTFMesh>` meshes **)**                                             |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_nodes<class_GLTFState_method_set_nodes>` **(** :ref:`GLTFNode[]<class_GLTFNode>` nodes **)**                                                |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_skeleton_to_node<class_GLTFState_method_set_skeleton_to_node>` **(** :ref:`Dictionary<class_Dictionary>` skeleton_to_node **)**             |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_skeletons<class_GLTFState_method_set_skeletons>` **(** :ref:`GLTFSkeleton[]<class_GLTFSkeleton>` skeletons **)**                            |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_skins<class_GLTFState_method_set_skins>` **(** :ref:`GLTFSkin[]<class_GLTFSkin>` skins **)**                                                |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_textures<class_GLTFState_method_set_textures>` **(** :ref:`GLTFTexture[]<class_GLTFTexture>` textures **)**                                 |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_unique_animation_names<class_GLTFState_method_set_unique_animation_names>` **(** :ref:`String[]<class_String>` unique_animation_names **)** |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                          | :ref:`set_unique_names<class_GLTFState_method_set_unique_names>` **(** :ref:`String[]<class_String>` unique_names **)**                               |
-+-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`add_used_extension<class_GLTFState_method_add_used_extension>` **(** :ref:`String<class_String>` extension_name, :ref:`bool<class_bool>` required **)** |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFAccessor[]<class_GLTFAccessor>`             | :ref:`get_accessors<class_GLTFState_method_get_accessors>` **(** **)**                                                                                        |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`AnimationPlayer<class_AnimationPlayer>`         | :ref:`get_animation_player<class_GLTFState_method_get_animation_player>` **(** :ref:`int<class_int>` idx **)**                                                |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                 | :ref:`get_animation_players_count<class_GLTFState_method_get_animation_players_count>` **(** :ref:`int<class_int>` idx **)**                                  |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFAnimation[]<class_GLTFAnimation>`           | :ref:`get_animations<class_GLTFState_method_get_animations>` **(** **)**                                                                                      |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFBufferView[]<class_GLTFBufferView>`         | :ref:`get_buffer_views<class_GLTFState_method_get_buffer_views>` **(** **)**                                                                                  |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFCamera[]<class_GLTFCamera>`                 | :ref:`get_cameras<class_GLTFState_method_get_cameras>` **(** **)**                                                                                            |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Texture2D[]<class_Texture2D>`                   | :ref:`get_images<class_GLTFState_method_get_images>` **(** **)**                                                                                              |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFLight[]<class_GLTFLight>`                   | :ref:`get_lights<class_GLTFState_method_get_lights>` **(** **)**                                                                                              |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`BaseMaterial3D[]<class_BaseMaterial3D>`         | :ref:`get_materials<class_GLTFState_method_get_materials>` **(** **)**                                                                                        |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFMesh[]<class_GLTFMesh>`                     | :ref:`get_meshes<class_GLTFState_method_get_meshes>` **(** **)**                                                                                              |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFNode[]<class_GLTFNode>`                     | :ref:`get_nodes<class_GLTFState_method_get_nodes>` **(** **)**                                                                                                |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Node<class_Node>`                               | :ref:`get_scene_node<class_GLTFState_method_get_scene_node>` **(** :ref:`int<class_int>` idx **)**                                                            |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Dictionary<class_Dictionary>`                   | :ref:`get_skeleton_to_node<class_GLTFState_method_get_skeleton_to_node>` **(** **)**                                                                          |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFSkeleton[]<class_GLTFSkeleton>`             | :ref:`get_skeletons<class_GLTFState_method_get_skeletons>` **(** **)**                                                                                        |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFSkin[]<class_GLTFSkin>`                     | :ref:`get_skins<class_GLTFState_method_get_skins>` **(** **)**                                                                                                |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFTextureSampler[]<class_GLTFTextureSampler>` | :ref:`get_texture_samplers<class_GLTFState_method_get_texture_samplers>` **(** **)**                                                                          |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`GLTFTexture[]<class_GLTFTexture>`               | :ref:`get_textures<class_GLTFState_method_get_textures>` **(** **)**                                                                                          |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String[]<class_String>`                         | :ref:`get_unique_animation_names<class_GLTFState_method_get_unique_animation_names>` **(** **)**                                                              |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String[]<class_String>`                         | :ref:`get_unique_names<class_GLTFState_method_get_unique_names>` **(** **)**                                                                                  |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_accessors<class_GLTFState_method_set_accessors>` **(** :ref:`GLTFAccessor[]<class_GLTFAccessor>` accessors **)**                                    |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_animations<class_GLTFState_method_set_animations>` **(** :ref:`GLTFAnimation[]<class_GLTFAnimation>` animations **)**                               |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_buffer_views<class_GLTFState_method_set_buffer_views>` **(** :ref:`GLTFBufferView[]<class_GLTFBufferView>` buffer_views **)**                       |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_cameras<class_GLTFState_method_set_cameras>` **(** :ref:`GLTFCamera[]<class_GLTFCamera>` cameras **)**                                              |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_images<class_GLTFState_method_set_images>` **(** :ref:`Texture2D[]<class_Texture2D>` images **)**                                                   |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_lights<class_GLTFState_method_set_lights>` **(** :ref:`GLTFLight[]<class_GLTFLight>` lights **)**                                                   |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_materials<class_GLTFState_method_set_materials>` **(** :ref:`BaseMaterial3D[]<class_BaseMaterial3D>` materials **)**                                |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_meshes<class_GLTFState_method_set_meshes>` **(** :ref:`GLTFMesh[]<class_GLTFMesh>` meshes **)**                                                     |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_nodes<class_GLTFState_method_set_nodes>` **(** :ref:`GLTFNode[]<class_GLTFNode>` nodes **)**                                                        |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_skeleton_to_node<class_GLTFState_method_set_skeleton_to_node>` **(** :ref:`Dictionary<class_Dictionary>` skeleton_to_node **)**                     |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_skeletons<class_GLTFState_method_set_skeletons>` **(** :ref:`GLTFSkeleton[]<class_GLTFSkeleton>` skeletons **)**                                    |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_skins<class_GLTFState_method_set_skins>` **(** :ref:`GLTFSkin[]<class_GLTFSkin>` skins **)**                                                        |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_texture_samplers<class_GLTFState_method_set_texture_samplers>` **(** :ref:`GLTFTextureSampler[]<class_GLTFTextureSampler>` texture_samplers **)**   |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_textures<class_GLTFState_method_set_textures>` **(** :ref:`GLTFTexture[]<class_GLTFTexture>` textures **)**                                         |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_unique_animation_names<class_GLTFState_method_set_unique_animation_names>` **(** :ref:`String[]<class_String>` unique_animation_names **)**         |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                  | :ref:`set_unique_names<class_GLTFState_method_set_unique_names>` **(** :ref:`String[]<class_String>` unique_names **)**                                       |
++-------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
@@ -254,6 +260,14 @@ Property Descriptions
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
 
 
+.. _class_GLTFState_method_add_used_extension:
+
+- void **add_used_extension** **(** :ref:`String<class_String>` extension_name, :ref:`bool<class_bool>` required **)**
+
+Appends an extension to the list of extensions used by this GLTF file during serialization. If ``required`` is true, the extension will also be added to the list of required extensions. Do not run this in :ref:`GLTFDocumentExtension._export_post<class_GLTFDocumentExtension_method__export_post>`, as that stage is too late to add extensions. The final list is sorted alphabetically.
+
+----
+
 .. _class_GLTFState_method_get_accessors:
 .. _class_GLTFState_method_get_accessors:
 
 
 - :ref:`GLTFAccessor[]<class_GLTFAccessor>` **get_accessors** **(** **)**
 - :ref:`GLTFAccessor[]<class_GLTFAccessor>` **get_accessors** **(** **)**
@@ -344,6 +358,14 @@ Method Descriptions
 
 
 ----
 ----
 
 
+.. _class_GLTFState_method_get_texture_samplers:
+
+- :ref:`GLTFTextureSampler[]<class_GLTFTextureSampler>` **get_texture_samplers** **(** **)**
+
+Retrieves the array of texture samplers that are used by the textures contained in the GLTF.
+
+----
+
 .. _class_GLTFState_method_get_textures:
 .. _class_GLTFState_method_get_textures:
 
 
 - :ref:`GLTFTexture[]<class_GLTFTexture>` **get_textures** **(** **)**
 - :ref:`GLTFTexture[]<class_GLTFTexture>` **get_textures** **(** **)**
@@ -434,6 +456,14 @@ Method Descriptions
 
 
 ----
 ----
 
 
+.. _class_GLTFState_method_set_texture_samplers:
+
+- void **set_texture_samplers** **(** :ref:`GLTFTextureSampler[]<class_GLTFTextureSampler>` texture_samplers **)**
+
+Sets the array of texture samplers that are used by the textures contained in the GLTF.
+
+----
+
 .. _class_GLTFState_method_set_textures:
 .. _class_GLTFState_method_set_textures:
 
 
 - void **set_textures** **(** :ref:`GLTFTexture[]<class_GLTFTexture>` textures **)**
 - void **set_textures** **(** :ref:`GLTFTexture[]<class_GLTFTexture>` textures **)**

+ 21 - 3
classes/class_gltftexture.rst

@@ -17,13 +17,31 @@ GLTFTexture
 Properties
 Properties
 ----------
 ----------
 
 
-+-----------------------+--------------------------------------------------------+-------+
-| :ref:`int<class_int>` | :ref:`src_image<class_GLTFTexture_property_src_image>` | ``0`` |
-+-----------------------+--------------------------------------------------------+-------+
++-----------------------+--------------------------------------------------------+--------+
+| :ref:`int<class_int>` | :ref:`sampler<class_GLTFTexture_property_sampler>`     | ``-1`` |
++-----------------------+--------------------------------------------------------+--------+
+| :ref:`int<class_int>` | :ref:`src_image<class_GLTFTexture_property_src_image>` | ``0``  |
++-----------------------+--------------------------------------------------------+--------+
 
 
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
 
 
+.. _class_GLTFTexture_property_sampler:
+
+- :ref:`int<class_int>` **sampler**
+
++-----------+--------------------+
+| *Default* | ``-1``             |
++-----------+--------------------+
+| *Setter*  | set_sampler(value) |
++-----------+--------------------+
+| *Getter*  | get_sampler()      |
++-----------+--------------------+
+
+ID of the texture sampler to use when sampling the image. If -1, then the default texture sampler is used (linear filtering, and repeat wrapping in both axes).
+
+----
+
 .. _class_GLTFTexture_property_src_image:
 .. _class_GLTFTexture_property_src_image:
 
 
 - :ref:`int<class_int>` **src_image**
 - :ref:`int<class_int>` **src_image**

+ 105 - 0
classes/class_gltftexturesampler.rst

@@ -0,0 +1,105 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/modules/gltf/doc_classes/GLTFTextureSampler.xml.
+
+.. _class_GLTFTextureSampler:
+
+GLTFTextureSampler
+==================
+
+**Inherits:** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Represents a GLTF texture sampler
+
+Description
+-----------
+
+Represents a texture sampler as defined by the base GLTF spec. Texture samplers in GLTF specify how to sample data from the texture's base image, when rendering the texture on an object.
+
+Properties
+----------
+
++-----------------------+-----------------------------------------------------------------+-----------+
+| :ref:`int<class_int>` | :ref:`mag_filter<class_GLTFTextureSampler_property_mag_filter>` | ``9729``  |
++-----------------------+-----------------------------------------------------------------+-----------+
+| :ref:`int<class_int>` | :ref:`min_filter<class_GLTFTextureSampler_property_min_filter>` | ``9987``  |
++-----------------------+-----------------------------------------------------------------+-----------+
+| :ref:`int<class_int>` | :ref:`wrap_s<class_GLTFTextureSampler_property_wrap_s>`         | ``10497`` |
++-----------------------+-----------------------------------------------------------------+-----------+
+| :ref:`int<class_int>` | :ref:`wrap_t<class_GLTFTextureSampler_property_wrap_t>`         | ``10497`` |
++-----------------------+-----------------------------------------------------------------+-----------+
+
+Property Descriptions
+---------------------
+
+.. _class_GLTFTextureSampler_property_mag_filter:
+
+- :ref:`int<class_int>` **mag_filter**
+
++-----------+-----------------------+
+| *Default* | ``9729``              |
++-----------+-----------------------+
+| *Setter*  | set_mag_filter(value) |
++-----------+-----------------------+
+| *Getter*  | get_mag_filter()      |
++-----------+-----------------------+
+
+Texture's magnification filter, used when texture appears larger on screen than the source image.
+
+----
+
+.. _class_GLTFTextureSampler_property_min_filter:
+
+- :ref:`int<class_int>` **min_filter**
+
++-----------+-----------------------+
+| *Default* | ``9987``              |
++-----------+-----------------------+
+| *Setter*  | set_min_filter(value) |
++-----------+-----------------------+
+| *Getter*  | get_min_filter()      |
++-----------+-----------------------+
+
+Texture's minification filter, used when the texture appears smaller on screen than the source image.
+
+----
+
+.. _class_GLTFTextureSampler_property_wrap_s:
+
+- :ref:`int<class_int>` **wrap_s**
+
++-----------+-------------------+
+| *Default* | ``10497``         |
++-----------+-------------------+
+| *Setter*  | set_wrap_s(value) |
++-----------+-------------------+
+| *Getter*  | get_wrap_s()      |
++-----------+-------------------+
+
+Wrapping mode to use for S-axis (horizontal) texture coordinates.
+
+----
+
+.. _class_GLTFTextureSampler_property_wrap_t:
+
+- :ref:`int<class_int>` **wrap_t**
+
++-----------+-------------------+
+| *Default* | ``10497``         |
++-----------+-------------------+
+| *Setter*  | set_wrap_t(value) |
++-----------+-------------------+
+| *Getter*  | get_wrap_t()      |
++-----------+-------------------+
+
+Wrapping mode to use for T-axis (vertical) texture coordinates.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 1 - 1
classes/class_gridmap.rst

@@ -382,7 +382,7 @@ The :ref:`MeshLibrary<class_MeshLibrary>` item index located at the given grid c
 
 
 - :ref:`Basis<class_Basis>` **get_cell_item_basis** **(** :ref:`Vector3i<class_Vector3i>` position **)** |const|
 - :ref:`Basis<class_Basis>` **get_cell_item_basis** **(** :ref:`Vector3i<class_Vector3i>` position **)** |const|
 
 
-Returns the basis that gives the specificed cell its orientation.
+Returns the basis that gives the specified cell its orientation.
 
 
 ----
 ----
 
 

+ 9 - 9
classes/class_hmaccontext.rst

@@ -50,22 +50,22 @@ The HMACContext class is useful for advanced HMAC use cases, such as streaming t
     public class CryptoNode : Node
     public class CryptoNode : Node
     {
     {
         private HMACContext ctx = new HMACContext();
         private HMACContext ctx = new HMACContext();
+    
         public override void _Ready()
         public override void _Ready()
         {
         {
-            PackedByteArray key = String("supersecret").to_utf8();
-            Error err = ctx.Start(HashingContext.HASH_SHA256, key);
-            GD.Assert(err == OK);
-            PackedByteArray msg1 = String("this is ").to_utf8();
-            PackedByteArray msg2 = String("super duper secret").to_utf8();
+            byte[] key = "supersecret".ToUTF8();
+            Error err = ctx.Start(HashingContext.HashType.Sha256, key);
+            Debug.Assert(err == Error.Ok);
+            byte[] msg1 = "this is ".ToUTF8();
+            byte[] msg2 = "super duper secret".ToUTF8();
             err = ctx.Update(msg1);
             err = ctx.Update(msg1);
-            GD.Assert(err == OK);
+            Debug.Assert(err == Error.Ok);
             err = ctx.Update(msg2);
             err = ctx.Update(msg2);
-            GD.Assert(err == OK);
-            PackedByteArray hmac = ctx.Finish();
+            Debug.Assert(err == Error.Ok);
+            byte[] hmac = ctx.Finish();
             GD.Print(hmac.HexEncode());
             GD.Print(hmac.HexEncode());
         }
         }
     }
     }
-    
 
 
 
 
 
 

+ 29 - 15
classes/class_hslider.rst

@@ -24,25 +24,39 @@ Horizontal slider. See :ref:`Slider<class_Slider>`. This one goes from left (min
 Theme Properties
 Theme Properties
 ----------------
 ----------------
 
 
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`Texture2D<class_Texture2D>` | :ref:`grabber<class_HSlider_theme_icon_grabber>`                                |
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`Texture2D<class_Texture2D>` | :ref:`grabber_disabled<class_HSlider_theme_icon_grabber_disabled>`              |
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`Texture2D<class_Texture2D>` | :ref:`grabber_highlight<class_HSlider_theme_icon_grabber_highlight>`            |
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`Texture2D<class_Texture2D>` | :ref:`tick<class_HSlider_theme_icon_tick>`                                      |
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`StyleBox<class_StyleBox>`   | :ref:`grabber_area<class_HSlider_theme_style_grabber_area>`                     |
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`StyleBox<class_StyleBox>`   | :ref:`grabber_area_highlight<class_HSlider_theme_style_grabber_area_highlight>` |
-+-----------------------------------+---------------------------------------------------------------------------------+
-| :ref:`StyleBox<class_StyleBox>`   | :ref:`slider<class_HSlider_theme_style_slider>`                                 |
-+-----------------------------------+---------------------------------------------------------------------------------+
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`int<class_int>`             | :ref:`grabber_offset<class_HSlider_theme_constant_grabber_offset>`              | ``0`` |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`grabber<class_HSlider_theme_icon_grabber>`                                |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`grabber_disabled<class_HSlider_theme_icon_grabber_disabled>`              |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`grabber_highlight<class_HSlider_theme_icon_grabber_highlight>`            |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`Texture2D<class_Texture2D>` | :ref:`tick<class_HSlider_theme_icon_tick>`                                      |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`StyleBox<class_StyleBox>`   | :ref:`grabber_area<class_HSlider_theme_style_grabber_area>`                     |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`StyleBox<class_StyleBox>`   | :ref:`grabber_area_highlight<class_HSlider_theme_style_grabber_area_highlight>` |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
+| :ref:`StyleBox<class_StyleBox>`   | :ref:`slider<class_HSlider_theme_style_slider>`                                 |       |
++-----------------------------------+---------------------------------------------------------------------------------+-------+
 
 
 Theme Property Descriptions
 Theme Property Descriptions
 ---------------------------
 ---------------------------
 
 
+.. _class_HSlider_theme_constant_grabber_offset:
+
+- :ref:`int<class_int>` **grabber_offset**
+
++-----------+-------+
+| *Default* | ``0`` |
++-----------+-------+
+
+Vertical offset of the grabber.
+
+----
+
 .. _class_HSlider_theme_icon_grabber:
 .. _class_HSlider_theme_icon_grabber:
 
 
 - :ref:`Texture2D<class_Texture2D>` **grabber**
 - :ref:`Texture2D<class_Texture2D>` **grabber**

+ 0 - 2
classes/class_image.rst

@@ -674,8 +674,6 @@ Flips the image vertically.
 
 
 Generates mipmaps for the image. Mipmaps are precalculated lower-resolution copies of the image that are automatically used if the image needs to be scaled down when rendered. They help improve image quality and performance when rendering. This method returns an error if the image is compressed, in a custom format, or if the image's width/height is ``0``.
 Generates mipmaps for the image. Mipmaps are precalculated lower-resolution copies of the image that are automatically used if the image needs to be scaled down when rendered. They help improve image quality and performance when rendering. This method returns an error if the image is compressed, in a custom format, or if the image's width/height is ``0``.
 
 
-\ **Note:** Mipmap generation is done on the CPU, is single-threaded and is *always* done on the main thread. This means generating mipmaps will result in noticeable stuttering during gameplay, even if :ref:`generate_mipmaps<class_Image_method_generate_mipmaps>` is called from a :ref:`Thread<class_Thread>`.
-
 ----
 ----
 
 
 .. _class_Image_method_get_data:
 .. _class_Image_method_get_data:

+ 48 - 0
classes/class_imageformatloader.rst

@@ -0,0 +1,48 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/ImageFormatLoader.xml.
+
+.. _class_ImageFormatLoader:
+
+ImageFormatLoader
+=================
+
+**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+**Inherited By:** :ref:`ImageFormatLoaderExtension<class_ImageFormatLoaderExtension>`
+
+Base class to add support for specific image formats.
+
+Description
+-----------
+
+The engine supports multiple image formats out of the box (PNG, SVG, JPEG, WebP to name a few), but you can choose to implement support for additional image formats by extending :ref:`ImageFormatLoaderExtension<class_ImageFormatLoaderExtension>`.
+
+Enumerations
+------------
+
+.. _enum_ImageFormatLoader_LoaderFlags:
+
+.. _class_ImageFormatLoader_constant_FLAG_NONE:
+
+.. _class_ImageFormatLoader_constant_FLAG_FORCE_LINEAR:
+
+.. _class_ImageFormatLoader_constant_FLAG_CONVERT_COLORS:
+
+flags **LoaderFlags**:
+
+- **FLAG_NONE** = **0**
+
+- **FLAG_FORCE_LINEAR** = **1**
+
+- **FLAG_CONVERT_COLORS** = **2**
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 75 - 0
classes/class_imageformatloaderextension.rst

@@ -0,0 +1,75 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/ImageFormatLoaderExtension.xml.
+
+.. _class_ImageFormatLoaderExtension:
+
+ImageFormatLoaderExtension
+==========================
+
+**Inherits:** :ref:`ImageFormatLoader<class_ImageFormatLoader>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Base class for creating :ref:`ImageFormatLoader<class_ImageFormatLoader>` extensions (adding support for extra image formats).
+
+Description
+-----------
+
+The engine supports multiple image formats out of the box (PNG, SVG, JPEG, WebP to name a few), but you can choose to implement support for additional image formats by extending this class.
+
+Be sure to respect the documented return types and values. You should create an instance of it, and call :ref:`add_format_loader<class_ImageFormatLoaderExtension_method_add_format_loader>` to register that loader during the initialization phase.
+
+Methods
+-------
+
++---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`_get_recognized_extensions<class_ImageFormatLoaderExtension_method__get_recognized_extensions>` **(** **)** |virtual| |const|                                                                                                                                          |
++---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Error<enum_@GlobalScope_Error>`             | :ref:`_load_image<class_ImageFormatLoaderExtension_method__load_image>` **(** :ref:`Image<class_Image>` image, :ref:`FileAccess<class_FileAccess>` fileaccess, :ref:`LoaderFlags<enum_ImageFormatLoader_LoaderFlags>` flags, :ref:`float<class_float>` scale **)** |virtual| |
++---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`add_format_loader<class_ImageFormatLoaderExtension_method_add_format_loader>` **(** **)**                                                                                                                                                                              |
++---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                              | :ref:`remove_format_loader<class_ImageFormatLoaderExtension_method_remove_format_loader>` **(** **)**                                                                                                                                                                        |
++---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+
+Method Descriptions
+-------------------
+
+.. _class_ImageFormatLoaderExtension_method__get_recognized_extensions:
+
+- :ref:`PackedStringArray<class_PackedStringArray>` **_get_recognized_extensions** **(** **)** |virtual| |const|
+
+Returns the list of file extensions for this image format. Files with the given extensions will be treated as image file and loaded using this class.
+
+----
+
+.. _class_ImageFormatLoaderExtension_method__load_image:
+
+- :ref:`Error<enum_@GlobalScope_Error>` **_load_image** **(** :ref:`Image<class_Image>` image, :ref:`FileAccess<class_FileAccess>` fileaccess, :ref:`LoaderFlags<enum_ImageFormatLoader_LoaderFlags>` flags, :ref:`float<class_float>` scale **)** |virtual|
+
+Loads the content of ``fileaccess`` into the provided ``image``.
+
+----
+
+.. _class_ImageFormatLoaderExtension_method_add_format_loader:
+
+- void **add_format_loader** **(** **)**
+
+Add this format loader to the engine, allowing it to recognize the file extensions returned by :ref:`_get_recognized_extensions<class_ImageFormatLoaderExtension_method__get_recognized_extensions>`.
+
+----
+
+.. _class_ImageFormatLoaderExtension_method_remove_format_loader:
+
+- void **remove_format_loader** **(** **)**
+
+Remove this format loader from the engine.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 12 - 0
classes/class_imagetexturelayered.rst

@@ -32,12 +32,24 @@ Method Descriptions
 
 
 - :ref:`Error<enum_@GlobalScope_Error>` **create_from_images** **(** :ref:`Image[]<class_Image>` images **)**
 - :ref:`Error<enum_@GlobalScope_Error>` **create_from_images** **(** :ref:`Image[]<class_Image>` images **)**
 
 
+Creates an ``ImageTextureLayered`` from an array of :ref:`Image<class_Image>`\ s. The first image decides the width, height, image format and mipmapping setting. The other images must have the same width, height, image format and mipmapping setting.
+
+Each :ref:`Image<class_Image>` represents one ``layer``.
+
 ----
 ----
 
 
 .. _class_ImageTextureLayered_method_update_layer:
 .. _class_ImageTextureLayered_method_update_layer:
 
 
 - void **update_layer** **(** :ref:`Image<class_Image>` image, :ref:`int<class_int>` layer **)**
 - void **update_layer** **(** :ref:`Image<class_Image>` image, :ref:`int<class_int>` layer **)**
 
 
+Replaces the existing :ref:`Image<class_Image>` data at the given ``layer`` with this new image.
+
+The given :ref:`Image<class_Image>` must have the same width, height, image format and mipmapping setting (a ``bool`` value) as the rest of the referenced images.
+
+If the image format is unsupported, it will be decompressed and converted to a similar and supported :ref:`Format<enum_Image_Format>`.
+
+The update is immediate: synced with the draw.
+
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 1 - 1
classes/class_inputeventwithmodifiers.rst

@@ -79,7 +79,7 @@ State of the :kbd:`Alt` modifier.
 | *Getter*  | is_command_or_control_autoremap()       |
 | *Getter*  | is_command_or_control_autoremap()       |
 +-----------+-----------------------------------------+
 +-----------+-----------------------------------------+
 
 
-Automaticaly use :kbd:`Meta` (:kbd:`Command`) on macOS and :kbd:`Ctrl` on other platforms. If ``true``, :ref:`ctrl_pressed<class_InputEventWithModifiers_property_ctrl_pressed>` and :ref:`meta_pressed<class_InputEventWithModifiers_property_meta_pressed>` cannot be set.
+Automatically use :kbd:`Meta` (:kbd:`Command`) on macOS and :kbd:`Ctrl` on other platforms. If ``true``, :ref:`ctrl_pressed<class_InputEventWithModifiers_property_ctrl_pressed>` and :ref:`meta_pressed<class_InputEventWithModifiers_property_meta_pressed>` cannot be set.
 
 
 ----
 ----
 
 

+ 34 - 12
classes/class_json.rst

@@ -21,7 +21,7 @@ The ``JSON`` enables all data types to be converted to and from a JSON string. T
 
 
 \ :ref:`stringify<class_JSON_method_stringify>` is used to convert any data type into a JSON string.
 \ :ref:`stringify<class_JSON_method_stringify>` is used to convert any data type into a JSON string.
 
 
-\ :ref:`parse<class_JSON_method_parse>` is used to convert any existing JSON data into a :ref:`Variant<class_Variant>` that can be used within Godot. If successfully parsed, use :ref:`get_data<class_JSON_method_get_data>` to retrieve the :ref:`Variant<class_Variant>`, and use ``typeof`` to check if the Variant's type is what you expect. JSON Objects are converted into a :ref:`Dictionary<class_Dictionary>`, but JSON data can be used to store :ref:`Array<class_Array>`\ s, numbers, :ref:`String<class_String>`\ s and even just a boolean.
+\ :ref:`parse<class_JSON_method_parse>` is used to convert any existing JSON data into a :ref:`Variant<class_Variant>` that can be used within Godot. If successfully parsed, use :ref:`data<class_JSON_property_data>` to retrieve the :ref:`Variant<class_Variant>`, and use ``typeof`` to check if the Variant's type is what you expect. JSON Objects are converted into a :ref:`Dictionary<class_Dictionary>`, but JSON data can be used to store :ref:`Array<class_Array>`\ s, numbers, :ref:`String<class_String>`\ s and even just a boolean.
 
 
 \ **Example**\ 
 \ **Example**\ 
 
 
@@ -34,7 +34,7 @@ The ``JSON`` enables all data types to be converted to and from a JSON string. T
     # Retrieve data
     # Retrieve data
     var error = json.parse(json_string)
     var error = json.parse(json_string)
     if error == OK:
     if error == OK:
-        var data_received = json.get_data()
+        var data_received = json.data
         if typeof(data_received) == TYPE_ARRAY:
         if typeof(data_received) == TYPE_ARRAY:
             print(data_received) # Prints array
             print(data_received) # Prints array
         else:
         else:
@@ -48,11 +48,26 @@ Alternatively, you can parse string using the static :ref:`parse_string<class_JS
 
 
     var data = JSON.parse_string(json_string) # Returns null if parsing failed.
     var data = JSON.parse_string(json_string) # Returns null if parsing failed.
 
 
+\ **Note:** Both parse methods do not fully comply with the JSON specification:
+
+- Trailing commas in arrays or objects are ignored, instead of causing a parser error.
+
+- New line and tab characters are accepted in string literals, and are treated like their corresponding escape sequences ``\n`` and ``\t``.
+
+- Numbers are parsed using :ref:`String.to_float<class_String_method_to_float>` which is generally more lax than the JSON specification.
+
+- Certain errors, such as invalid Unicode sequences, do not cause a parser error. Instead, the string is cleansed and an error is logged to the console.
+
+Properties
+----------
+
++-------------------------------+---------------------------------------+----------+
+| :ref:`Variant<class_Variant>` | :ref:`data<class_JSON_property_data>` | ``null`` |
++-------------------------------+---------------------------------------+----------+
+
 Methods
 Methods
 -------
 -------
 
 
-+---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`Variant<class_Variant>`         | :ref:`get_data<class_JSON_method_get_data>` **(** **)** |const|                                                                                                                                                                    |
 +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                 | :ref:`get_error_line<class_JSON_method_get_error_line>` **(** **)** |const|                                                                                                                                                        |
 | :ref:`int<class_int>`                 | :ref:`get_error_line<class_JSON_method_get_error_line>` **(** **)** |const|                                                                                                                                                        |
 +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -65,18 +80,25 @@ Methods
 | :ref:`String<class_String>`           | :ref:`stringify<class_JSON_method_stringify>` **(** :ref:`Variant<class_Variant>` data, :ref:`String<class_String>` indent="", :ref:`bool<class_bool>` sort_keys=true, :ref:`bool<class_bool>` full_precision=false **)** |static| |
 | :ref:`String<class_String>`           | :ref:`stringify<class_JSON_method_stringify>` **(** :ref:`Variant<class_Variant>` data, :ref:`String<class_String>` indent="", :ref:`bool<class_bool>` sort_keys=true, :ref:`bool<class_bool>` full_precision=false **)** |static| |
 +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
-Method Descriptions
--------------------
+Property Descriptions
+---------------------
 
 
-.. _class_JSON_method_get_data:
+.. _class_JSON_property_data:
 
 
-- :ref:`Variant<class_Variant>` **get_data** **(** **)** |const|
+- :ref:`Variant<class_Variant>` **data**
 
 
-Returns the :ref:`Variant<class_Variant>` containing the data of a successful :ref:`parse<class_JSON_method_parse>`.
++-----------+-----------------+
+| *Default* | ``null``        |
++-----------+-----------------+
+| *Setter*  | set_data(value) |
++-----------+-----------------+
+| *Getter*  | get_data()      |
++-----------+-----------------+
 
 
-\ **Note:** It will return ``Null`` if the last call to parse was unsuccessful or :ref:`parse<class_JSON_method_parse>` has not yet been called.
+Contains the parsed JSON data in :ref:`Variant<class_Variant>` form.
 
 
-----
+Method Descriptions
+-------------------
 
 
 .. _class_JSON_method_get_error_line:
 .. _class_JSON_method_get_error_line:
 
 
@@ -100,7 +122,7 @@ Returns an empty string if the last call to :ref:`parse<class_JSON_method_parse>
 
 
 Attempts to parse the ``json_string`` provided.
 Attempts to parse the ``json_string`` provided.
 
 
-Returns an :ref:`Error<enum_@GlobalScope_Error>`. If the parse was successful, it returns ``OK`` and the result can be retrieved using :ref:`get_data<class_JSON_method_get_data>`. If unsuccessful, use :ref:`get_error_line<class_JSON_method_get_error_line>` and :ref:`get_error_message<class_JSON_method_get_error_message>` for identifying the source of the failure.
+Returns an :ref:`Error<enum_@GlobalScope_Error>`. If the parse was successful, it returns ``OK`` and the result can be retrieved using :ref:`data<class_JSON_property_data>`. If unsuccessful, use :ref:`get_error_line<class_JSON_method_get_error_line>` and :ref:`get_error_message<class_JSON_method_get_error_message>` for identifying the source of the failure.
 
 
 Non-static variant of :ref:`parse_string<class_JSON_method_parse_string>`, if you want custom error handling.
 Non-static variant of :ref:`parse_string<class_JSON_method_parse_string>`, if you want custom error handling.
 
 

+ 6 - 6
classes/class_lightmapgi.rst

@@ -35,7 +35,7 @@ Properties
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 | :ref:`float<class_float>`                               | :ref:`bias<class_LightmapGI_property_bias>`                                           | ``0.0005`` |
 | :ref:`float<class_float>`                               | :ref:`bias<class_LightmapGI_property_bias>`                                           | ``0.0005`` |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
-| :ref:`int<class_int>`                                   | :ref:`bounces<class_LightmapGI_property_bounces>`                                     | ``1``      |
+| :ref:`int<class_int>`                                   | :ref:`bounces<class_LightmapGI_property_bounces>`                                     | ``3``      |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 | :ref:`CameraAttributes<class_CameraAttributes>`         | :ref:`camera_attributes<class_LightmapGI_property_camera_attributes>`                 |            |
 | :ref:`CameraAttributes<class_CameraAttributes>`         | :ref:`camera_attributes<class_LightmapGI_property_camera_attributes>`                 |            |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
@@ -47,9 +47,9 @@ Properties
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 | :ref:`Sky<class_Sky>`                                   | :ref:`environment_custom_sky<class_LightmapGI_property_environment_custom_sky>`       |            |
 | :ref:`Sky<class_Sky>`                                   | :ref:`environment_custom_sky<class_LightmapGI_property_environment_custom_sky>`       |            |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
-| :ref:`EnvironmentMode<enum_LightmapGI_EnvironmentMode>` | :ref:`environment_mode<class_LightmapGI_property_environment_mode>`                   | ``0``      |
+| :ref:`EnvironmentMode<enum_LightmapGI_EnvironmentMode>` | :ref:`environment_mode<class_LightmapGI_property_environment_mode>`                   | ``1``      |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
-| :ref:`GenerateProbes<enum_LightmapGI_GenerateProbes>`   | :ref:`generate_probes_subdiv<class_LightmapGI_property_generate_probes_subdiv>`       | ``0``      |
+| :ref:`GenerateProbes<enum_LightmapGI_GenerateProbes>`   | :ref:`generate_probes_subdiv<class_LightmapGI_property_generate_probes_subdiv>`       | ``2``      |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 | :ref:`bool<class_bool>`                                 | :ref:`interior<class_LightmapGI_property_interior>`                                   | ``false``  |
 | :ref:`bool<class_bool>`                                 | :ref:`interior<class_LightmapGI_property_interior>`                                   | ``false``  |
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
 +---------------------------------------------------------+---------------------------------------------------------------------------------------+------------+
@@ -193,7 +193,7 @@ The bias to use when computing shadows. Increasing :ref:`bias<class_LightmapGI_p
 - :ref:`int<class_int>` **bounces**
 - :ref:`int<class_int>` **bounces**
 
 
 +-----------+--------------------+
 +-----------+--------------------+
-| *Default* | ``1``              |
+| *Default* | ``3``              |
 +-----------+--------------------+
 +-----------+--------------------+
 | *Setter*  | set_bounces(value) |
 | *Setter*  | set_bounces(value) |
 +-----------+--------------------+
 +-----------+--------------------+
@@ -283,7 +283,7 @@ The sky to use as a source of environment lighting. Only effective if :ref:`envi
 - :ref:`EnvironmentMode<enum_LightmapGI_EnvironmentMode>` **environment_mode**
 - :ref:`EnvironmentMode<enum_LightmapGI_EnvironmentMode>` **environment_mode**
 
 
 +-----------+-----------------------------+
 +-----------+-----------------------------+
-| *Default* | ``0``                       |
+| *Default* | ``1``                       |
 +-----------+-----------------------------+
 +-----------+-----------------------------+
 | *Setter*  | set_environment_mode(value) |
 | *Setter*  | set_environment_mode(value) |
 +-----------+-----------------------------+
 +-----------+-----------------------------+
@@ -299,7 +299,7 @@ The environment mode to use when baking lightmaps.
 - :ref:`GenerateProbes<enum_LightmapGI_GenerateProbes>` **generate_probes_subdiv**
 - :ref:`GenerateProbes<enum_LightmapGI_GenerateProbes>` **generate_probes_subdiv**
 
 
 +-----------+----------------------------+
 +-----------+----------------------------+
-| *Default* | ``0``                      |
+| *Default* | ``2``                      |
 +-----------+----------------------------+
 +-----------+----------------------------+
 | *Setter*  | set_generate_probes(value) |
 | *Setter*  | set_generate_probes(value) |
 +-----------+----------------------------+
 +-----------+----------------------------+

+ 10 - 0
classes/class_menubutton.rst

@@ -48,6 +48,8 @@ Methods
 +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------+
 | void                              | :ref:`set_disable_shortcuts<class_MenuButton_method_set_disable_shortcuts>` **(** :ref:`bool<class_bool>` disabled **)** |
 | void                              | :ref:`set_disable_shortcuts<class_MenuButton_method_set_disable_shortcuts>` **(** :ref:`bool<class_bool>` disabled **)** |
 +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------+--------------------------------------------------------------------------------------------------------------------------+
+| void                              | :ref:`show_popup<class_MenuButton_method_show_popup>` **(** **)**                                                        |
++-----------------------------------+--------------------------------------------------------------------------------------------------------------------------+
 
 
 Theme Properties
 Theme Properties
 ----------------
 ----------------
@@ -145,6 +147,14 @@ Returns the :ref:`PopupMenu<class_PopupMenu>` contained in this button.
 
 
 If ``true``, shortcuts are disabled and cannot be used to trigger the button.
 If ``true``, shortcuts are disabled and cannot be used to trigger the button.
 
 
+----
+
+.. _class_MenuButton_method_show_popup:
+
+- void **show_popup** **(** **)**
+
+Adjusts popup position and sizing for the ``MenuButton``, then shows the :ref:`PopupMenu<class_PopupMenu>`. Prefer this over using ``get_popup().popup()``.
+
 Theme Property Descriptions
 Theme Property Descriptions
 ---------------------------
 ---------------------------
 
 

+ 1 - 1
classes/class_multiplayerapiextension.rst

@@ -19,7 +19,7 @@ Description
 
 
 This class can be used to augment or replace the default :ref:`MultiplayerAPI<class_MultiplayerAPI>` implementation via script or extensions.
 This class can be used to augment or replace the default :ref:`MultiplayerAPI<class_MultiplayerAPI>` implementation via script or extensions.
 
 
-The following example augment the default implemenation (:ref:`SceneMultiplayer<class_SceneMultiplayer>`) by logging every RPC being made, and every object being configured for replication.
+The following example augment the default implementation (:ref:`SceneMultiplayer<class_SceneMultiplayer>`) by logging every RPC being made, and every object being configured for replication.
 
 
 
 
 .. tabs::
 .. tabs::

+ 2 - 2
classes/class_multiplayersynchronizer.rst

@@ -19,7 +19,7 @@ Description
 
 
 By default, ``MultiplayerSynchronizer`` synchronizes configured properties to all peers.
 By default, ``MultiplayerSynchronizer`` synchronizes configured properties to all peers.
 
 
-Visiblity can be handled directly with :ref:`set_visibility_for<class_MultiplayerSynchronizer_method_set_visibility_for>` or as-needed with :ref:`add_visibility_filter<class_MultiplayerSynchronizer_method_add_visibility_filter>` and :ref:`update_visibility<class_MultiplayerSynchronizer_method_update_visibility>`.
+Visibility can be handled directly with :ref:`set_visibility_for<class_MultiplayerSynchronizer_method_set_visibility_for>` or as-needed with :ref:`add_visibility_filter<class_MultiplayerSynchronizer_method_add_visibility_filter>` and :ref:`update_visibility<class_MultiplayerSynchronizer_method_update_visibility>`.
 
 
 
 
 
 
@@ -195,7 +195,7 @@ Queries the current visibility for peer ``peer``.
 
 
 - void **remove_visibility_filter** **(** :ref:`Callable<class_Callable>` filter **)**
 - void **remove_visibility_filter** **(** :ref:`Callable<class_Callable>` filter **)**
 
 
-Removes a peer visiblity filter from this synchronizer.
+Removes a peer visibility filter from this synchronizer.
 
 
 ----
 ----
 
 

+ 1 - 1
classes/class_navigationobstacle2d.rst

@@ -19,7 +19,7 @@ Description
 
 
 2D Obstacle used in navigation for collision avoidance. The obstacle needs navigation data to work correctly. ``NavigationObstacle2D`` is physics safe.
 2D Obstacle used in navigation for collision avoidance. The obstacle needs navigation data to work correctly. ``NavigationObstacle2D`` is physics safe.
 
 
-\ **Note:** Obstacles are intended as a last resort option for constantly moving objects that cannot be (re)baked to a navigation mesh efficiently.
+Obstacles **don't** change the resulting path from the pathfinding, they only affect the navigation agent movement in a radius. Therefore, using obstacles for the static walls in your level won't work because those walls don't exist in the pathfinding. The navigation agent will be pushed in a semi-random direction away while moving inside that radius. Obstacles are intended as a last resort option for constantly moving objects that cannot be (re)baked to a navigation mesh efficiently.
 
 
 Properties
 Properties
 ----------
 ----------

+ 1 - 1
classes/class_navigationobstacle3d.rst

@@ -19,7 +19,7 @@ Description
 
 
 3D Obstacle used in navigation for collision avoidance. The obstacle needs navigation data to work correctly. ``NavigationObstacle3D`` is physics safe.
 3D Obstacle used in navigation for collision avoidance. The obstacle needs navigation data to work correctly. ``NavigationObstacle3D`` is physics safe.
 
 
-\ **Note:** Obstacles are intended as a last resort option for constantly moving objects that cannot be (re)baked to a navigation mesh efficiently.
+Obstacles **don't** change the resulting path from the pathfinding, they only affect the navigation agent movement in a radius. Therefore, using obstacles for the static walls in your level won't work because those walls don't exist in the pathfinding. The navigation agent will be pushed in a semi-random direction away while moving inside that radius. Obstacles are intended as a last resort option for constantly moving objects that cannot be (re)baked to a navigation mesh efficiently.
 
 
 Properties
 Properties
 ----------
 ----------

+ 164 - 0
classes/class_navigationpathqueryparameters2d.rst

@@ -0,0 +1,164 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/NavigationPathQueryParameters2D.xml.
+
+.. _class_NavigationPathQueryParameters2D:
+
+NavigationPathQueryParameters2D
+===============================
+
+**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Parameters to be sent to a 2D navigation path query.
+
+Description
+-----------
+
+This class contains the start and target position and other parameters to be used with :ref:`NavigationServer2D.query_path<class_NavigationServer2D_method_query_path>`.
+
+Properties
+----------
+
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+| :ref:`RID<class_RID>`                                                                  | :ref:`map<class_NavigationPathQueryParameters2D_property_map>`                                     |                   |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+| :ref:`int<class_int>`                                                                  | :ref:`navigation_layers<class_NavigationPathQueryParameters2D_property_navigation_layers>`         | ``1``             |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+| :ref:`PathPostProcessing<enum_NavigationPathQueryParameters2D_PathPostProcessing>`     | :ref:`path_postprocessing<class_NavigationPathQueryParameters2D_property_path_postprocessing>`     | ``0``             |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+| :ref:`PathfindingAlgorithm<enum_NavigationPathQueryParameters2D_PathfindingAlgorithm>` | :ref:`pathfinding_algorithm<class_NavigationPathQueryParameters2D_property_pathfinding_algorithm>` | ``0``             |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+| :ref:`Vector2<class_Vector2>`                                                          | :ref:`start_position<class_NavigationPathQueryParameters2D_property_start_position>`               | ``Vector2(0, 0)`` |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+| :ref:`Vector2<class_Vector2>`                                                          | :ref:`target_position<class_NavigationPathQueryParameters2D_property_target_position>`             | ``Vector2(0, 0)`` |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-------------------+
+
+Enumerations
+------------
+
+.. _enum_NavigationPathQueryParameters2D_PathfindingAlgorithm:
+
+.. _class_NavigationPathQueryParameters2D_constant_PATHFINDING_ALGORITHM_ASTAR:
+
+enum **PathfindingAlgorithm**:
+
+- **PATHFINDING_ALGORITHM_ASTAR** = **0** --- The path query uses the default A\* pathfinding algorithm.
+
+----
+
+.. _enum_NavigationPathQueryParameters2D_PathPostProcessing:
+
+.. _class_NavigationPathQueryParameters2D_constant_PATH_POSTPROCESSING_CORRIDORFUNNEL:
+
+.. _class_NavigationPathQueryParameters2D_constant_PATH_POSTPROCESSING_EDGECENTERED:
+
+enum **PathPostProcessing**:
+
+- **PATH_POSTPROCESSING_CORRIDORFUNNEL** = **0** --- Applies a funnel algorithm to the raw path corridor found by the pathfinding algorithm. This will result in the shortest path possible inside the path corridor. This postprocessing very much depends on the navmesh polygon layout and the created corridor. Especially tile- or gridbased layouts can face artificial corners with diagonal movement due to a jagged path corridor imposed by the cell shapes.
+
+- **PATH_POSTPROCESSING_EDGECENTERED** = **1** --- Centers every path position in the middle of the traveled navmesh polygon edge. This creates better paths for tile- or gridbased layouts that restrict the movement to the cells center.
+
+Property Descriptions
+---------------------
+
+.. _class_NavigationPathQueryParameters2D_property_map:
+
+- :ref:`RID<class_RID>` **map**
+
++----------+----------------+
+| *Setter* | set_map(value) |
++----------+----------------+
+| *Getter* | get_map()      |
++----------+----------------+
+
+The navigation ``map`` :ref:`RID<class_RID>` used in the path query.
+
+----
+
+.. _class_NavigationPathQueryParameters2D_property_navigation_layers:
+
+- :ref:`int<class_int>` **navigation_layers**
+
++-----------+------------------------------+
+| *Default* | ``1``                        |
++-----------+------------------------------+
+| *Setter*  | set_navigation_layers(value) |
++-----------+------------------------------+
+| *Getter*  | get_navigation_layers()      |
++-----------+------------------------------+
+
+The navigation layers the query will use (as a bitmask).
+
+----
+
+.. _class_NavigationPathQueryParameters2D_property_path_postprocessing:
+
+- :ref:`PathPostProcessing<enum_NavigationPathQueryParameters2D_PathPostProcessing>` **path_postprocessing**
+
++-----------+--------------------------------+
+| *Default* | ``0``                          |
++-----------+--------------------------------+
+| *Setter*  | set_path_postprocessing(value) |
++-----------+--------------------------------+
+| *Getter*  | get_path_postprocessing()      |
++-----------+--------------------------------+
+
+The path postprocessing applied to the raw path corridor found by the :ref:`pathfinding_algorithm<class_NavigationPathQueryParameters2D_property_pathfinding_algorithm>`.
+
+----
+
+.. _class_NavigationPathQueryParameters2D_property_pathfinding_algorithm:
+
+- :ref:`PathfindingAlgorithm<enum_NavigationPathQueryParameters2D_PathfindingAlgorithm>` **pathfinding_algorithm**
+
++-----------+----------------------------------+
+| *Default* | ``0``                            |
++-----------+----------------------------------+
+| *Setter*  | set_pathfinding_algorithm(value) |
++-----------+----------------------------------+
+| *Getter*  | get_pathfinding_algorithm()      |
++-----------+----------------------------------+
+
+The pathfinding algorithm used in the path query.
+
+----
+
+.. _class_NavigationPathQueryParameters2D_property_start_position:
+
+- :ref:`Vector2<class_Vector2>` **start_position**
+
++-----------+---------------------------+
+| *Default* | ``Vector2(0, 0)``         |
++-----------+---------------------------+
+| *Setter*  | set_start_position(value) |
++-----------+---------------------------+
+| *Getter*  | get_start_position()      |
++-----------+---------------------------+
+
+The pathfinding start position in global coordinates.
+
+----
+
+.. _class_NavigationPathQueryParameters2D_property_target_position:
+
+- :ref:`Vector2<class_Vector2>` **target_position**
+
++-----------+----------------------------+
+| *Default* | ``Vector2(0, 0)``          |
++-----------+----------------------------+
+| *Setter*  | set_target_position(value) |
++-----------+----------------------------+
+| *Getter*  | get_target_position()      |
++-----------+----------------------------+
+
+The pathfinding target position in global coordinates.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 164 - 0
classes/class_navigationpathqueryparameters3d.rst

@@ -0,0 +1,164 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/NavigationPathQueryParameters3D.xml.
+
+.. _class_NavigationPathQueryParameters3D:
+
+NavigationPathQueryParameters3D
+===============================
+
+**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Parameters to be sent to a 3D navigation path query.
+
+Description
+-----------
+
+This class contains the start and target position and other parameters to be used with :ref:`NavigationServer3D.query_path<class_NavigationServer3D_method_query_path>`.
+
+Properties
+----------
+
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+| :ref:`RID<class_RID>`                                                                  | :ref:`map<class_NavigationPathQueryParameters3D_property_map>`                                     |                      |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+| :ref:`int<class_int>`                                                                  | :ref:`navigation_layers<class_NavigationPathQueryParameters3D_property_navigation_layers>`         | ``1``                |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+| :ref:`PathPostProcessing<enum_NavigationPathQueryParameters3D_PathPostProcessing>`     | :ref:`path_postprocessing<class_NavigationPathQueryParameters3D_property_path_postprocessing>`     | ``0``                |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+| :ref:`PathfindingAlgorithm<enum_NavigationPathQueryParameters3D_PathfindingAlgorithm>` | :ref:`pathfinding_algorithm<class_NavigationPathQueryParameters3D_property_pathfinding_algorithm>` | ``0``                |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+| :ref:`Vector3<class_Vector3>`                                                          | :ref:`start_position<class_NavigationPathQueryParameters3D_property_start_position>`               | ``Vector3(0, 0, 0)`` |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+| :ref:`Vector3<class_Vector3>`                                                          | :ref:`target_position<class_NavigationPathQueryParameters3D_property_target_position>`             | ``Vector3(0, 0, 0)`` |
++----------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+----------------------+
+
+Enumerations
+------------
+
+.. _enum_NavigationPathQueryParameters3D_PathfindingAlgorithm:
+
+.. _class_NavigationPathQueryParameters3D_constant_PATHFINDING_ALGORITHM_ASTAR:
+
+enum **PathfindingAlgorithm**:
+
+- **PATHFINDING_ALGORITHM_ASTAR** = **0** --- The path query uses the default A\* pathfinding algorithm.
+
+----
+
+.. _enum_NavigationPathQueryParameters3D_PathPostProcessing:
+
+.. _class_NavigationPathQueryParameters3D_constant_PATH_POSTPROCESSING_CORRIDORFUNNEL:
+
+.. _class_NavigationPathQueryParameters3D_constant_PATH_POSTPROCESSING_EDGECENTERED:
+
+enum **PathPostProcessing**:
+
+- **PATH_POSTPROCESSING_CORRIDORFUNNEL** = **0** --- Applies a funnel algorithm to the raw path corridor found by the pathfinding algorithm. This will result in the shortest path possible inside the path corridor. This postprocessing very much depends on the navmesh polygon layout and the created corridor. Especially tile- or gridbased layouts can face artificial corners with diagonal movement due to a jagged path corridor imposed by the cell shapes.
+
+- **PATH_POSTPROCESSING_EDGECENTERED** = **1** --- Centers every path position in the middle of the traveled navmesh polygon edge. This creates better paths for tile- or gridbased layouts that restrict the movement to the cells center.
+
+Property Descriptions
+---------------------
+
+.. _class_NavigationPathQueryParameters3D_property_map:
+
+- :ref:`RID<class_RID>` **map**
+
++----------+----------------+
+| *Setter* | set_map(value) |
++----------+----------------+
+| *Getter* | get_map()      |
++----------+----------------+
+
+The navigation ``map`` :ref:`RID<class_RID>` used in the path query.
+
+----
+
+.. _class_NavigationPathQueryParameters3D_property_navigation_layers:
+
+- :ref:`int<class_int>` **navigation_layers**
+
++-----------+------------------------------+
+| *Default* | ``1``                        |
++-----------+------------------------------+
+| *Setter*  | set_navigation_layers(value) |
++-----------+------------------------------+
+| *Getter*  | get_navigation_layers()      |
++-----------+------------------------------+
+
+The navigation layers the query will use (as a bitmask).
+
+----
+
+.. _class_NavigationPathQueryParameters3D_property_path_postprocessing:
+
+- :ref:`PathPostProcessing<enum_NavigationPathQueryParameters3D_PathPostProcessing>` **path_postprocessing**
+
++-----------+--------------------------------+
+| *Default* | ``0``                          |
++-----------+--------------------------------+
+| *Setter*  | set_path_postprocessing(value) |
++-----------+--------------------------------+
+| *Getter*  | get_path_postprocessing()      |
++-----------+--------------------------------+
+
+The path postprocessing applied to the raw path corridor found by the :ref:`pathfinding_algorithm<class_NavigationPathQueryParameters3D_property_pathfinding_algorithm>`.
+
+----
+
+.. _class_NavigationPathQueryParameters3D_property_pathfinding_algorithm:
+
+- :ref:`PathfindingAlgorithm<enum_NavigationPathQueryParameters3D_PathfindingAlgorithm>` **pathfinding_algorithm**
+
++-----------+----------------------------------+
+| *Default* | ``0``                            |
++-----------+----------------------------------+
+| *Setter*  | set_pathfinding_algorithm(value) |
++-----------+----------------------------------+
+| *Getter*  | get_pathfinding_algorithm()      |
++-----------+----------------------------------+
+
+The pathfinding algorithm used in the path query.
+
+----
+
+.. _class_NavigationPathQueryParameters3D_property_start_position:
+
+- :ref:`Vector3<class_Vector3>` **start_position**
+
++-----------+---------------------------+
+| *Default* | ``Vector3(0, 0, 0)``      |
++-----------+---------------------------+
+| *Setter*  | set_start_position(value) |
++-----------+---------------------------+
+| *Getter*  | get_start_position()      |
++-----------+---------------------------+
+
+The pathfinding start position in global coordinates.
+
+----
+
+.. _class_NavigationPathQueryParameters3D_property_target_position:
+
+- :ref:`Vector3<class_Vector3>` **target_position**
+
++-----------+----------------------------+
+| *Default* | ``Vector3(0, 0, 0)``       |
++-----------+----------------------------+
+| *Setter*  | set_target_position(value) |
++-----------+----------------------------+
+| *Getter*  | get_target_position()      |
++-----------+----------------------------+
+
+The pathfinding target position in global coordinates.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 67 - 0
classes/class_navigationpathqueryresult2d.rst

@@ -0,0 +1,67 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/NavigationPathQueryResult2D.xml.
+
+.. _class_NavigationPathQueryResult2D:
+
+NavigationPathQueryResult2D
+===========================
+
+**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Result from a :ref:`NavigationPathQueryParameters2D<class_NavigationPathQueryParameters2D>` navigation path query.
+
+Description
+-----------
+
+This class contains the result of a navigation path query from :ref:`NavigationServer2D.query_path<class_NavigationServer2D_method_query_path>`.
+
+Properties
+----------
+
++-----------------------------------------------------+--------------------------------------------------------------+--------------------------+
+| :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`path<class_NavigationPathQueryResult2D_property_path>` | ``PackedVector2Array()`` |
++-----------------------------------------------------+--------------------------------------------------------------+--------------------------+
+
+Methods
+-------
+
++------+--------------------------------------------------------------------------+
+| void | :ref:`reset<class_NavigationPathQueryResult2D_method_reset>` **(** **)** |
++------+--------------------------------------------------------------------------+
+
+Property Descriptions
+---------------------
+
+.. _class_NavigationPathQueryResult2D_property_path:
+
+- :ref:`PackedVector2Array<class_PackedVector2Array>` **path**
+
++-----------+--------------------------+
+| *Default* | ``PackedVector2Array()`` |
++-----------+--------------------------+
+| *Setter*  | set_path(value)          |
++-----------+--------------------------+
+| *Getter*  | get_path()               |
++-----------+--------------------------+
+
+The resulting path array from the navigation query. All path array positions are in global coordinates. Without customized query parameters this is the same path as returned by :ref:`NavigationServer2D.map_get_path<class_NavigationServer2D_method_map_get_path>`.
+
+Method Descriptions
+-------------------
+
+.. _class_NavigationPathQueryResult2D_method_reset:
+
+- void **reset** **(** **)**
+
+Reset the result object to its initial state.  This is useful to reuse the object across multiple queries.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 67 - 0
classes/class_navigationpathqueryresult3d.rst

@@ -0,0 +1,67 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/NavigationPathQueryResult3D.xml.
+
+.. _class_NavigationPathQueryResult3D:
+
+NavigationPathQueryResult3D
+===========================
+
+**Inherits:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Result from a :ref:`NavigationPathQueryParameters3D<class_NavigationPathQueryParameters3D>` navigation path query.
+
+Description
+-----------
+
+This class contains the result of a navigation path query from :ref:`NavigationServer3D.query_path<class_NavigationServer3D_method_query_path>`.
+
+Properties
+----------
+
++-----------------------------------------------------+--------------------------------------------------------------+--------------------------+
+| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`path<class_NavigationPathQueryResult3D_property_path>` | ``PackedVector3Array()`` |
++-----------------------------------------------------+--------------------------------------------------------------+--------------------------+
+
+Methods
+-------
+
++------+--------------------------------------------------------------------------+
+| void | :ref:`reset<class_NavigationPathQueryResult3D_method_reset>` **(** **)** |
++------+--------------------------------------------------------------------------+
+
+Property Descriptions
+---------------------
+
+.. _class_NavigationPathQueryResult3D_property_path:
+
+- :ref:`PackedVector3Array<class_PackedVector3Array>` **path**
+
++-----------+--------------------------+
+| *Default* | ``PackedVector3Array()`` |
++-----------+--------------------------+
+| *Setter*  | set_path(value)          |
++-----------+--------------------------+
+| *Getter*  | get_path()               |
++-----------+--------------------------+
+
+The resulting path array from the navigation query. All path array positions are in global coordinates. Without customized query parameters this is the same path as returned by :ref:`NavigationServer3D.map_get_path<class_NavigationServer3D_method_map_get_path>`.
+
+Method Descriptions
+-------------------
+
+.. _class_NavigationPathQueryResult3D_method_reset:
+
+- void **reset** **(** **)**
+
+Reset the result object to its initial state.  This is useful to reuse the object across multiple queries.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 2 - 0
classes/class_navigationregion2d.rst

@@ -29,6 +29,8 @@ The pathfinding cost of entering this region from another region can be controll
 
 
 The pathfinding cost of traveling distances inside this region can be controlled with the :ref:`travel_cost<class_NavigationRegion2D_property_travel_cost>` multiplier.
 The pathfinding cost of traveling distances inside this region can be controlled with the :ref:`travel_cost<class_NavigationRegion2D_property_travel_cost>` multiplier.
 
 
+\ **Note:** This node caches changes to its properties, so if you make changes to the underlying region :ref:`RID<class_RID>` in :ref:`NavigationServer2D<class_NavigationServer2D>`, they will not be reflected in this node's properties.
+
 Properties
 Properties
 ----------
 ----------
 
 

+ 2 - 0
classes/class_navigationregion3d.rst

@@ -29,6 +29,8 @@ The cost of entering this region from another region can be controlled with the
 
 
 The cost of traveling distances inside this region can be controlled with the :ref:`travel_cost<class_NavigationRegion3D_property_travel_cost>` multiplier.
 The cost of traveling distances inside this region can be controlled with the :ref:`travel_cost<class_NavigationRegion3D_property_travel_cost>` multiplier.
 
 
+\ **Note:** This node caches changes to its properties, so if you make changes to the underlying region :ref:`RID<class_RID>` in :ref:`NavigationServer3D<class_NavigationServer3D>`, they will not be reflected in this node's properties.
+
 Properties
 Properties
 ----------
 ----------
 
 

+ 10 - 0
classes/class_navigationserver2d.rst

@@ -134,6 +134,8 @@ Methods
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                | :ref:`map_set_link_connection_radius<class_NavigationServer2D_method_map_set_link_connection_radius>` **(** :ref:`RID<class_RID>` map, :ref:`float<class_float>` radius **)** |const|                                                                                         |
 | void                                                | :ref:`map_set_link_connection_radius<class_NavigationServer2D_method_map_set_link_connection_radius>` **(** :ref:`RID<class_RID>` map, :ref:`float<class_float>` radius **)** |const|                                                                                         |
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                | :ref:`query_path<class_NavigationServer2D_method_query_path>` **(** :ref:`NavigationPathQueryParameters2D<class_NavigationPathQueryParameters2D>` parameters, :ref:`NavigationPathQueryResult2D<class_NavigationPathQueryResult2D>` result **)** |const|                      |
++-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`RID<class_RID>`                               | :ref:`region_create<class_NavigationServer2D_method_region_create>` **(** **)** |const|                                                                                                                                                                                       |
 | :ref:`RID<class_RID>`                               | :ref:`region_create<class_NavigationServer2D_method_region_create>` **(** **)** |const|                                                                                                                                                                                       |
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Vector2<class_Vector2>`                       | :ref:`region_get_connection_pathway_end<class_NavigationServer2D_method_region_get_connection_pathway_end>` **(** :ref:`RID<class_RID>` region, :ref:`int<class_int>` connection **)** |const|                                                                                |
 | :ref:`Vector2<class_Vector2>`                       | :ref:`region_get_connection_pathway_end<class_NavigationServer2D_method_region_get_connection_pathway_end>` **(** :ref:`RID<class_RID>` region, :ref:`int<class_int>` connection **)** |const|                                                                                |
@@ -553,6 +555,14 @@ Set the map's link connection radius used to connect links to navigation polygon
 
 
 ----
 ----
 
 
+.. _class_NavigationServer2D_method_query_path:
+
+- void **query_path** **(** :ref:`NavigationPathQueryParameters2D<class_NavigationPathQueryParameters2D>` parameters, :ref:`NavigationPathQueryResult2D<class_NavigationPathQueryResult2D>` result **)** |const|
+
+Queries a path in a given navigation map. Start and target position and other parameters are defined through :ref:`NavigationPathQueryParameters2D<class_NavigationPathQueryParameters2D>`. Updates the provided :ref:`NavigationPathQueryResult2D<class_NavigationPathQueryResult2D>` result object with the path among other results requested by the query.
+
+----
+
 .. _class_NavigationServer2D_method_region_create:
 .. _class_NavigationServer2D_method_region_create:
 
 
 - :ref:`RID<class_RID>` **region_create** **(** **)** |const|
 - :ref:`RID<class_RID>` **region_create** **(** **)** |const|

+ 10 - 0
classes/class_navigationserver3d.rst

@@ -144,6 +144,8 @@ Methods
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                | :ref:`process<class_NavigationServer3D_method_process>` **(** :ref:`float<class_float>` delta_time **)**                                                                                                                                                                      |
 | void                                                | :ref:`process<class_NavigationServer3D_method_process>` **(** :ref:`float<class_float>` delta_time **)**                                                                                                                                                                      |
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                | :ref:`query_path<class_NavigationServer3D_method_query_path>` **(** :ref:`NavigationPathQueryParameters3D<class_NavigationPathQueryParameters3D>` parameters, :ref:`NavigationPathQueryResult3D<class_NavigationPathQueryResult3D>` result **)** |const|                      |
++-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                | :ref:`region_bake_navmesh<class_NavigationServer3D_method_region_bake_navmesh>` **(** :ref:`NavigationMesh<class_NavigationMesh>` mesh, :ref:`Node<class_Node>` node **)** |const|                                                                                            |
 | void                                                | :ref:`region_bake_navmesh<class_NavigationServer3D_method_region_bake_navmesh>` **(** :ref:`NavigationMesh<class_NavigationMesh>` mesh, :ref:`Node<class_Node>` node **)** |const|                                                                                            |
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`RID<class_RID>`                               | :ref:`region_create<class_NavigationServer3D_method_region_create>` **(** **)** |const|                                                                                                                                                                                       |
 | :ref:`RID<class_RID>`                               | :ref:`region_create<class_NavigationServer3D_method_region_create>` **(** **)** |const|                                                                                                                                                                                       |
@@ -619,6 +621,14 @@ The result of this process is needed by the physics server, so this must be call
 
 
 ----
 ----
 
 
+.. _class_NavigationServer3D_method_query_path:
+
+- void **query_path** **(** :ref:`NavigationPathQueryParameters3D<class_NavigationPathQueryParameters3D>` parameters, :ref:`NavigationPathQueryResult3D<class_NavigationPathQueryResult3D>` result **)** |const|
+
+Queries a path in a given navigation map. Start and target position and other parameters are defined through :ref:`NavigationPathQueryParameters3D<class_NavigationPathQueryParameters3D>`. Updates the provided :ref:`NavigationPathQueryResult3D<class_NavigationPathQueryResult3D>` result object with the path among other results requested by the query.
+
+----
+
 .. _class_NavigationServer3D_method_region_bake_navmesh:
 .. _class_NavigationServer3D_method_region_bake_navmesh:
 
 
 - void **region_bake_navmesh** **(** :ref:`NavigationMesh<class_NavigationMesh>` mesh, :ref:`Node<class_Node>` node **)** |const|
 - void **region_bake_navmesh** **(** :ref:`NavigationMesh<class_NavigationMesh>` mesh, :ref:`Node<class_Node>` node **)** |const|

+ 31 - 5
classes/class_node.rst

@@ -632,7 +632,7 @@ The name of the node. This name is unique among the siblings (other child nodes
 
 
 The node owner. A node can have any other node as owner (as long as it is a valid parent, grandparent, etc. ascending in the tree). When saving a node (using :ref:`PackedScene<class_PackedScene>`), all the nodes it owns will be saved with it. This allows for the creation of complex :ref:`SceneTree<class_SceneTree>`\ s, with instancing and subinstancing.
 The node owner. A node can have any other node as owner (as long as it is a valid parent, grandparent, etc. ascending in the tree). When saving a node (using :ref:`PackedScene<class_PackedScene>`), all the nodes it owns will be saved with it. This allows for the creation of complex :ref:`SceneTree<class_SceneTree>`\ s, with instancing and subinstancing.
 
 
-\ **Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for :doc:`tool scripts <../tutorials/misc/running_code_in_the_editor>` and :doc:`editor plugins <../tutorials/plugins/editor/index>`. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
+\ **Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for :doc:`tool scripts <../tutorials/plugins/running_code_in_the_editor>` and :doc:`editor plugins <../tutorials/plugins/editor/index>`. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
 
 
 ----
 ----
 
 
@@ -827,7 +827,7 @@ For gameplay input, this and :ref:`_unhandled_key_input<class_Node_method__unhan
 
 
 - void **_unhandled_key_input** **(** :ref:`InputEvent<class_InputEvent>` event **)** |virtual|
 - void **_unhandled_key_input** **(** :ref:`InputEvent<class_InputEvent>` event **)** |virtual|
 
 
-Called when an :ref:`InputEventKey<class_InputEventKey>` or :ref:`InputEventShortcut<class_InputEventShortcut>` hasn't been consumed by :ref:`_input<class_Node_method__input>` or any GUI :ref:`Control<class_Control>` item. The input event propagates up through the node tree until a node consumes it.
+Called when an :ref:`InputEventKey<class_InputEventKey>` hasn't been consumed by :ref:`_input<class_Node_method__input>` or any GUI :ref:`Control<class_Control>` item. The input event propagates up through the node tree until a node consumes it.
 
 
 It is only called if unhandled key input processing is enabled, which is done automatically if this method is overridden, and can be toggled with :ref:`set_process_unhandled_key_input<class_Node_method_set_process_unhandled_key_input>`.
 It is only called if unhandled key input processing is enabled, which is done automatically if this method is overridden, and can be toggled with :ref:`set_process_unhandled_key_input<class_Node_method_set_process_unhandled_key_input>`.
 
 
@@ -837,6 +837,8 @@ This method can be used to handle Unicode character input with :kbd:`Alt`, :kbd:
 
 
 For gameplay input, this and :ref:`_unhandled_input<class_Node_method__unhandled_input>` are usually a better fit than :ref:`_input<class_Node_method__input>` as they allow the GUI to intercept the events first.
 For gameplay input, this and :ref:`_unhandled_input<class_Node_method__unhandled_input>` are usually a better fit than :ref:`_input<class_Node_method__input>` as they allow the GUI to intercept the events first.
 
 
+This method also performs better than :ref:`_unhandled_input<class_Node_method__unhandled_input>`, since unrelated events such as :ref:`InputEventMouseMotion<class_InputEventMouseMotion>` are automatically filtered.
+
 \ **Note:** This method is only called if the node is present in the scene tree (i.e. if it's not an orphan).
 \ **Note:** This method is only called if the node is present in the scene tree (i.e. if it's not an orphan).
 
 
 ----
 ----
@@ -876,7 +878,7 @@ If ``internal`` is different than :ref:`INTERNAL_MODE_DISABLED<class_Node_consta
 
 
 If you need the child node to be added below a specific node in the list of children, use :ref:`add_sibling<class_Node_method_add_sibling>` instead of this method.
 If you need the child node to be added below a specific node in the list of children, use :ref:`add_sibling<class_Node_method_add_sibling>` instead of this method.
 
 
-\ **Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for :doc:`tool scripts <../tutorials/misc/running_code_in_the_editor>` and :doc:`editor plugins <../tutorials/plugins/editor/index>`. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
+\ **Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for :doc:`tool scripts <../tutorials/plugins/running_code_in_the_editor>` and :doc:`editor plugins <../tutorials/plugins/editor/index>`. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
 
 
 ----
 ----
 
 
@@ -920,10 +922,19 @@ Returns ``true`` if the node can process while the scene tree is paused (see :re
 
 
 Creates a new :ref:`Tween<class_Tween>` and binds it to this node. This is equivalent of doing:
 Creates a new :ref:`Tween<class_Tween>` and binds it to this node. This is equivalent of doing:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     get_tree().create_tween().bind_node(self)
     get_tree().create_tween().bind_node(self)
 
 
+ .. code-tab:: csharp
+
+    GetTree().CreateTween().BindNode(this);
+
+
+
 ----
 ----
 
 
 .. _class_Node_method_duplicate:
 .. _class_Node_method_duplicate:
@@ -1036,7 +1047,10 @@ Returns an array listing the groups that the node is a member of.
 
 
 \ **Note:** The engine uses some group names internally (all starting with an underscore). To avoid conflicts with internal groups, do not add custom groups whose name starts with an underscore. To exclude internal groups while looping over :ref:`get_groups<class_Node_method_get_groups>`, use the following snippet:
 \ **Note:** The engine uses some group names internally (all starting with an underscore). To avoid conflicts with internal groups, do not add custom groups whose name starts with an underscore. To exclude internal groups while looping over :ref:`get_groups<class_Node_method_get_groups>`, use the following snippet:
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     # Stores the node's non-internal groups only (as an array of Strings).
     # Stores the node's non-internal groups only (as an array of Strings).
     var non_internal_groups = []
     var non_internal_groups = []
@@ -1044,6 +1058,18 @@ Returns an array listing the groups that the node is a member of.
         if not group.begins_with("_"):
         if not group.begins_with("_"):
             non_internal_groups.push_back(group)
             non_internal_groups.push_back(group)
 
 
+ .. code-tab:: csharp
+
+    // Stores the node's non-internal groups only (as a List of strings).
+    List<string> nonInternalGroups = new List<string>();
+    foreach (string group in GetGroups())
+    {
+        if (!group.BeginsWith("_"))
+            nonInternalGroups.Add(group);
+    }
+
+
+
 ----
 ----
 
 
 .. _class_Node_method_get_index:
 .. _class_Node_method_get_index:

+ 4 - 0
classes/class_node2d.rst

@@ -221,6 +221,10 @@ The node's scale. Unscaled value: ``(1, 1)``.
 | *Getter*  | get_skew()      |
 | *Getter*  | get_skew()      |
 +-----------+-----------------+
 +-----------+-----------------+
 
 
+Slants the node.
+
+\ **Note:** Skew is X axis only.
+
 ----
 ----
 
 
 .. _class_Node2D_property_transform:
 .. _class_Node2D_property_transform:

+ 8 - 2
classes/class_node3d.rst

@@ -12,7 +12,7 @@ Node3D
 
 
 **Inherits:** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
 **Inherits:** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
 
 
-**Inherited By:** :ref:`AudioListener3D<class_AudioListener3D>`, :ref:`AudioStreamPlayer3D<class_AudioStreamPlayer3D>`, :ref:`BoneAttachment3D<class_BoneAttachment3D>`, :ref:`Camera3D<class_Camera3D>`, :ref:`CollisionObject3D<class_CollisionObject3D>`, :ref:`CollisionPolygon3D<class_CollisionPolygon3D>`, :ref:`CollisionShape3D<class_CollisionShape3D>`, :ref:`GridMap<class_GridMap>`, :ref:`ImporterMeshInstance3D<class_ImporterMeshInstance3D>`, :ref:`Joint3D<class_Joint3D>`, :ref:`LightmapProbe<class_LightmapProbe>`, :ref:`Marker3D<class_Marker3D>`, :ref:`NavigationLink3D<class_NavigationLink3D>`, :ref:`NavigationRegion3D<class_NavigationRegion3D>`, :ref:`OccluderInstance3D<class_OccluderInstance3D>`, :ref:`Path3D<class_Path3D>`, :ref:`PathFollow3D<class_PathFollow3D>`, :ref:`RayCast3D<class_RayCast3D>`, :ref:`RemoteTransform3D<class_RemoteTransform3D>`, :ref:`ShapeCast3D<class_ShapeCast3D>`, :ref:`Skeleton3D<class_Skeleton3D>`, :ref:`SpringArm3D<class_SpringArm3D>`, :ref:`VehicleWheel3D<class_VehicleWheel3D>`, :ref:`VisualInstance3D<class_VisualInstance3D>`, :ref:`XRNode3D<class_XRNode3D>`, :ref:`XROrigin3D<class_XROrigin3D>`
+**Inherited By:** :ref:`AudioListener3D<class_AudioListener3D>`, :ref:`AudioStreamPlayer3D<class_AudioStreamPlayer3D>`, :ref:`BoneAttachment3D<class_BoneAttachment3D>`, :ref:`Camera3D<class_Camera3D>`, :ref:`CollisionObject3D<class_CollisionObject3D>`, :ref:`CollisionPolygon3D<class_CollisionPolygon3D>`, :ref:`CollisionShape3D<class_CollisionShape3D>`, :ref:`GridMap<class_GridMap>`, :ref:`ImporterMeshInstance3D<class_ImporterMeshInstance3D>`, :ref:`Joint3D<class_Joint3D>`, :ref:`LightmapProbe<class_LightmapProbe>`, :ref:`Marker3D<class_Marker3D>`, :ref:`NavigationLink3D<class_NavigationLink3D>`, :ref:`NavigationRegion3D<class_NavigationRegion3D>`, :ref:`OccluderInstance3D<class_OccluderInstance3D>`, :ref:`OpenXRHand<class_OpenXRHand>`, :ref:`Path3D<class_Path3D>`, :ref:`PathFollow3D<class_PathFollow3D>`, :ref:`RayCast3D<class_RayCast3D>`, :ref:`RemoteTransform3D<class_RemoteTransform3D>`, :ref:`ShapeCast3D<class_ShapeCast3D>`, :ref:`Skeleton3D<class_Skeleton3D>`, :ref:`SpringArm3D<class_SpringArm3D>`, :ref:`VehicleWheel3D<class_VehicleWheel3D>`, :ref:`VisualInstance3D<class_VisualInstance3D>`, :ref:`XRNode3D<class_XRNode3D>`, :ref:`XROrigin3D<class_XROrigin3D>`
 
 
 Most basic 3D game object, parent of all 3D-related nodes.
 Most basic 3D game object, parent of all 3D-related nodes.
 
 
@@ -211,6 +211,8 @@ Constants
 
 
 .. _class_Node3D_constant_NOTIFICATION_VISIBILITY_CHANGED:
 .. _class_Node3D_constant_NOTIFICATION_VISIBILITY_CHANGED:
 
 
+.. _class_Node3D_constant_NOTIFICATION_LOCAL_TRANSFORM_CHANGED:
+
 - **NOTIFICATION_TRANSFORM_CHANGED** = **2000** --- Node3D nodes receives this notification when their global transform changes. This means that either the current or a parent node changed its transform.
 - **NOTIFICATION_TRANSFORM_CHANGED** = **2000** --- Node3D nodes receives this notification when their global transform changes. This means that either the current or a parent node changed its transform.
 
 
 In order for :ref:`NOTIFICATION_TRANSFORM_CHANGED<class_Node3D_constant_NOTIFICATION_TRANSFORM_CHANGED>` to work, users first need to ask for it, with :ref:`set_notify_transform<class_Node3D_method_set_notify_transform>`. The notification is also sent if the node is in the editor context and it has at least one valid gizmo.
 In order for :ref:`NOTIFICATION_TRANSFORM_CHANGED<class_Node3D_constant_NOTIFICATION_TRANSFORM_CHANGED>` to work, users first need to ask for it, with :ref:`set_notify_transform<class_Node3D_method_set_notify_transform>`. The notification is also sent if the node is in the editor context and it has at least one valid gizmo.
@@ -221,6 +223,10 @@ In order for :ref:`NOTIFICATION_TRANSFORM_CHANGED<class_Node3D_constant_NOTIFICA
 
 
 - **NOTIFICATION_VISIBILITY_CHANGED** = **43** --- Node3D nodes receives this notification when their visibility changes.
 - **NOTIFICATION_VISIBILITY_CHANGED** = **43** --- Node3D nodes receives this notification when their visibility changes.
 
 
+- **NOTIFICATION_LOCAL_TRANSFORM_CHANGED** = **44** --- Node3D nodes receives this notification when their local transform changes. This is not received when the transform of a parent node is changed.
+
+In order for :ref:`NOTIFICATION_LOCAL_TRANSFORM_CHANGED<class_Node3D_constant_NOTIFICATION_LOCAL_TRANSFORM_CHANGED>` to work, users first need to ask for it, with :ref:`set_notify_local_transform<class_Node3D_method_set_notify_local_transform>`.
+
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
 
 
@@ -575,7 +581,7 @@ The local up axis (+Y) points as close to the ``up`` vector as possible while st
 
 
 The ``target`` position cannot be the same as the node's position, the ``up`` vector cannot be zero, and the direction from the node's position to the ``target`` vector cannot be parallel to the ``up`` vector.
 The ``target`` position cannot be the same as the node's position, the ``up`` vector cannot be zero, and the direction from the node's position to the ``target`` vector cannot be parallel to the ``up`` vector.
 
 
-Operations take place in global space.
+Operations take place in global space, which means that the node must be in the scene tree.
 
 
 ----
 ----
 
 

+ 124 - 0
classes/class_openxrhand.rst

@@ -0,0 +1,124 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/modules/openxr/doc_classes/OpenXRHand.xml.
+
+.. _class_OpenXRHand:
+
+OpenXRHand
+==========
+
+**Inherits:** :ref:`Node3D<class_Node3D>` **<** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
+
+Node supporting finger tracking in OpenXR.
+
+Description
+-----------
+
+This node enables OpenXR's hand tracking functionality. The node should be a child node of an :ref:`XROrigin3D<class_XROrigin3D>` node, tracking will update its position to where the player's actual hand is positioned. This node also updates the skeleton of a properly skinned hand model. The hand mesh should be a child node of this node.
+
+Properties
+----------
+
++-------------------------------------------------+---------------------------------------------------------------+------------------+
+| :ref:`Hands<enum_OpenXRHand_Hands>`             | :ref:`hand<class_OpenXRHand_property_hand>`                   | ``0``            |
++-------------------------------------------------+---------------------------------------------------------------+------------------+
+| :ref:`NodePath<class_NodePath>`                 | :ref:`hand_skeleton<class_OpenXRHand_property_hand_skeleton>` | ``NodePath("")`` |
++-------------------------------------------------+---------------------------------------------------------------+------------------+
+| :ref:`MotionRange<enum_OpenXRHand_MotionRange>` | :ref:`motion_range<class_OpenXRHand_property_motion_range>`   | ``0``            |
++-------------------------------------------------+---------------------------------------------------------------+------------------+
+
+Enumerations
+------------
+
+.. _enum_OpenXRHand_Hands:
+
+.. _class_OpenXRHand_constant_HAND_LEFT:
+
+.. _class_OpenXRHand_constant_HAND_RIGHT:
+
+.. _class_OpenXRHand_constant_HAND_MAX:
+
+enum **Hands**:
+
+- **HAND_LEFT** = **0** --- Tracking the player's left hand.
+
+- **HAND_RIGHT** = **1** --- Tracking the player's right hand.
+
+- **HAND_MAX** = **2** --- Maximum supported hands.
+
+----
+
+.. _enum_OpenXRHand_MotionRange:
+
+.. _class_OpenXRHand_constant_MOTION_RANGE_UNOBSTRUCTED:
+
+.. _class_OpenXRHand_constant_MOTION_RANGE_CONFORM_TO_CONTROLLER:
+
+.. _class_OpenXRHand_constant_MOTION_RANGE_MAX:
+
+enum **MotionRange**:
+
+- **MOTION_RANGE_UNOBSTRUCTED** = **0** --- When player grips, hand skeleton will form a full fist.
+
+- **MOTION_RANGE_CONFORM_TO_CONTROLLER** = **1** --- When player grips, hand skeleton conforms to the controller the player is holding.
+
+- **MOTION_RANGE_MAX** = **2** --- Maximum supported motion ranges.
+
+Property Descriptions
+---------------------
+
+.. _class_OpenXRHand_property_hand:
+
+- :ref:`Hands<enum_OpenXRHand_Hands>` **hand**
+
++-----------+-----------------+
+| *Default* | ``0``           |
++-----------+-----------------+
+| *Setter*  | set_hand(value) |
++-----------+-----------------+
+| *Getter*  | get_hand()      |
++-----------+-----------------+
+
+Specifies whether this node tracks the left or right hand of the player.
+
+----
+
+.. _class_OpenXRHand_property_hand_skeleton:
+
+- :ref:`NodePath<class_NodePath>` **hand_skeleton**
+
++-----------+--------------------------+
+| *Default* | ``NodePath("")``         |
++-----------+--------------------------+
+| *Setter*  | set_hand_skeleton(value) |
++-----------+--------------------------+
+| *Getter*  | get_hand_skeleton()      |
++-----------+--------------------------+
+
+Set a :ref:`Skeleton3D<class_Skeleton3D>` node for which the pose positions will be updated.
+
+----
+
+.. _class_OpenXRHand_property_motion_range:
+
+- :ref:`MotionRange<enum_OpenXRHand_MotionRange>` **motion_range**
+
++-----------+-------------------------+
+| *Default* | ``0``                   |
++-----------+-------------------------+
+| *Setter*  | set_motion_range(value) |
++-----------+-------------------------+
+| *Getter*  | get_motion_range()      |
++-----------+-------------------------+
+
+Set the motion range (if supported) limiting the hand motion.
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 10 - 0
classes/class_optionbutton.rst

@@ -94,6 +94,8 @@ Methods
 +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                              | :ref:`set_item_tooltip<class_OptionButton_method_set_item_tooltip>` **(** :ref:`int<class_int>` idx, :ref:`String<class_String>` tooltip **)**                                      |
 | void                              | :ref:`set_item_tooltip<class_OptionButton_method_set_item_tooltip>` **(** :ref:`int<class_int>` idx, :ref:`String<class_String>` tooltip **)**                                      |
 +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                              | :ref:`show_popup<class_OptionButton_method_show_popup>` **(** **)**                                                                                                                 |
++-----------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Theme Properties
 Theme Properties
 ----------------
 ----------------
@@ -413,6 +415,14 @@ Sets the text of the item at index ``idx``.
 
 
 Sets the tooltip of the item at index ``idx``.
 Sets the tooltip of the item at index ``idx``.
 
 
+----
+
+.. _class_OptionButton_method_show_popup:
+
+- void **show_popup** **(** **)**
+
+Adjusts popup position and sizing for the ``OptionButton``, then shows the :ref:`PopupMenu<class_PopupMenu>`. Prefer this over using ``get_popup().popup()``.
+
 Theme Property Descriptions
 Theme Property Descriptions
 ---------------------------
 ---------------------------
 
 

+ 64 - 14
classes/class_os.rst

@@ -17,7 +17,7 @@ Operating System functions.
 Description
 Description
 -----------
 -----------
 
 
-Operating System functions. OS wraps the most common functionality to communicate with the host operating system, such as the clipboard, video driver, date and time, timers, environment variables, execution of binaries, command line, etc.
+Operating System functions. OS wraps the most common functionality to communicate with the host operating system, such as the clipboard, video driver, delays, environment variables, execution of binaries, command line, etc.
 
 
 Tutorials
 Tutorials
 ---------
 ---------
@@ -39,8 +39,6 @@ Methods
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                              | :ref:`alert<class_OS_method_alert>` **(** :ref:`String<class_String>` text, :ref:`String<class_String>` title="Alert!" **)**                                                                                                                                                  |
 | void                                              | :ref:`alert<class_OS_method_alert>` **(** :ref:`String<class_String>` text, :ref:`String<class_String>` title="Alert!" **)**                                                                                                                                                  |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                           | :ref:`can_use_threads<class_OS_method_can_use_threads>` **(** **)** |const|                                                                                                                                                                                                   |
-+---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                              | :ref:`close_midi_inputs<class_OS_method_close_midi_inputs>` **(** **)**                                                                                                                                                                                                       |
 | void                                              | :ref:`close_midi_inputs<class_OS_method_close_midi_inputs>` **(** **)**                                                                                                                                                                                                       |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                              | :ref:`crash<class_OS_method_crash>` **(** :ref:`String<class_String>` message **)**                                                                                                                                                                                           |
 | void                                              | :ref:`crash<class_OS_method_crash>` **(** :ref:`String<class_String>` message **)**                                                                                                                                                                                           |
@@ -69,6 +67,8 @@ Methods
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`String<class_String>`                       | :ref:`get_data_dir<class_OS_method_get_data_dir>` **(** **)** |const|                                                                                                                                                                                                         |
 | :ref:`String<class_String>`                       | :ref:`get_data_dir<class_OS_method_get_data_dir>` **(** **)** |const|                                                                                                                                                                                                         |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_distribution_name<class_OS_method_get_distribution_name>` **(** **)** |const|                                                                                                                                                                                       |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`String<class_String>`                       | :ref:`get_environment<class_OS_method_get_environment>` **(** :ref:`String<class_String>` variable **)** |const|                                                                                                                                                              |
 | :ref:`String<class_String>`                       | :ref:`get_environment<class_OS_method_get_environment>` **(** :ref:`String<class_String>` variable **)** |const|                                                                                                                                                              |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`String<class_String>`                       | :ref:`get_executable_path<class_OS_method_get_executable_path>` **(** **)** |const|                                                                                                                                                                                           |
 | :ref:`String<class_String>`                       | :ref:`get_executable_path<class_OS_method_get_executable_path>` **(** **)** |const|                                                                                                                                                                                           |
@@ -111,6 +111,8 @@ Methods
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`String<class_String>`                       | :ref:`get_user_data_dir<class_OS_method_get_user_data_dir>` **(** **)** |const|                                                                                                                                                                                               |
 | :ref:`String<class_String>`                       | :ref:`get_user_data_dir<class_OS_method_get_user_data_dir>` **(** **)** |const|                                                                                                                                                                                               |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`get_version<class_OS_method_get_version>` **(** **)** |const|                                                                                                                                                                                                           |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                           | :ref:`has_environment<class_OS_method_has_environment>` **(** :ref:`String<class_String>` variable **)** |const|                                                                                                                                                              |
 | :ref:`bool<class_bool>`                           | :ref:`has_environment<class_OS_method_has_environment>` **(** :ref:`String<class_String>` variable **)** |const|                                                                                                                                                              |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                           | :ref:`has_feature<class_OS_method_has_feature>` **(** :ref:`String<class_String>` tag_name **)** |const|                                                                                                                                                                      |
 | :ref:`bool<class_bool>`                           | :ref:`has_feature<class_OS_method_has_feature>` **(** :ref:`String<class_String>` tag_name **)** |const|                                                                                                                                                                      |
@@ -133,6 +135,8 @@ Methods
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                              | :ref:`open_midi_inputs<class_OS_method_open_midi_inputs>` **(** **)**                                                                                                                                                                                                         |
 | void                                              | :ref:`open_midi_inputs<class_OS_method_open_midi_inputs>` **(** **)**                                                                                                                                                                                                         |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`String<class_String>`                       | :ref:`read_string_from_stdin<class_OS_method_read_string_from_stdin>` **(** :ref:`bool<class_bool>` block=true **)**                                                                                                                                                          |
++---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                           | :ref:`request_permission<class_OS_method_request_permission>` **(** :ref:`String<class_String>` name **)**                                                                                                                                                                    |
 | :ref:`bool<class_bool>`                           | :ref:`request_permission<class_OS_method_request_permission>` **(** :ref:`String<class_String>` name **)**                                                                                                                                                                    |
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                           | :ref:`request_permissions<class_OS_method_request_permissions>` **(** **)**                                                                                                                                                                                                   |
 | :ref:`bool<class_bool>`                           | :ref:`request_permissions<class_OS_method_request_permissions>` **(** **)**                                                                                                                                                                                                   |
@@ -333,14 +337,6 @@ Displays a modal dialog box using the host OS' facilities. Execution is blocked
 
 
 ----
 ----
 
 
-.. _class_OS_method_can_use_threads:
-
-- :ref:`bool<class_bool>` **can_use_threads** **(** **)** |const|
-
-Returns ``true`` if the current host platform is using multiple threads.
-
-----
-
 .. _class_OS_method_close_midi_inputs:
 .. _class_OS_method_close_midi_inputs:
 
 
 - void **close_midi_inputs** **(** **)**
 - void **close_midi_inputs** **(** **)**
@@ -603,6 +599,20 @@ Not to be confused with :ref:`get_user_data_dir<class_OS_method_get_user_data_di
 
 
 ----
 ----
 
 
+.. _class_OS_method_get_distribution_name:
+
+- :ref:`String<class_String>` **get_distribution_name** **(** **)** |const|
+
+Returns the name of the distribution for Linux and BSD platforms (e.g. Ubuntu, Manjaro, OpenBSD, etc.).
+
+Returns the same value as :ref:`get_name<class_OS_method_get_name>` for stock Android ROMs, but attempts to return the custom ROM name for popular Android derivatives such as LineageOS.
+
+Returns the same value as :ref:`get_name<class_OS_method_get_name>` for other platforms.
+
+\ **Note:** This method is not supported on the web platform. It returns an empty string.
+
+----
+
 .. _class_OS_method_get_environment:
 .. _class_OS_method_get_environment:
 
 
 - :ref:`String<class_String>` **get_environment** **(** :ref:`String<class_String>` variable **)** |const|
 - :ref:`String<class_String>` **get_environment** **(** :ref:`String<class_String>` variable **)** |const|
@@ -893,6 +903,26 @@ Not to be confused with :ref:`get_data_dir<class_OS_method_get_data_dir>`, which
 
 
 ----
 ----
 
 
+.. _class_OS_method_get_version:
+
+- :ref:`String<class_String>` **get_version** **(** **)** |const|
+
+Returns the exact production and build version of the operating system. This is different from the branded version used in marketing. This helps to distinguish between different releases of operating systems, including minor versions, and insider and custom builds.
+
+For Windows, the major and minor version are returned, as well as the build number. For example, the returned string can look like ``10.0.9926`` for a build of Windows 10, and it can look like ``6.1.7601`` for a build of Windows 7 SP1.
+
+For rolling distributions, such as Arch Linux, an empty string is returned.
+
+For macOS and iOS, the major and minor version are returned, as well as the patch number.
+
+For UWP, the device family version is returned.
+
+For Android, the SDK version and the incremental build number are returned. If it's a custom ROM, it attempts to return its version instead.
+
+\ **Note:** This method is not supported on the web platform. It returns an empty string.
+
+----
+
 .. _class_OS_method_has_environment:
 .. _class_OS_method_has_environment:
 
 
 - :ref:`bool<class_bool>` **has_environment** **(** :ref:`String<class_String>` variable **)** |const|
 - :ref:`bool<class_bool>` **has_environment** **(** :ref:`String<class_String>` variable **)** |const|
@@ -985,17 +1015,27 @@ Kill (terminate) the process identified by the given process ID (``pid``), e.g.
 
 
 - :ref:`Error<enum_@GlobalScope_Error>` **move_to_trash** **(** :ref:`String<class_String>` path **)** |const|
 - :ref:`Error<enum_@GlobalScope_Error>` **move_to_trash** **(** :ref:`String<class_String>` path **)** |const|
 
 
-Moves the file or directory to the system's recycle bin. See also :ref:`Directory.remove<class_Directory_method_remove>`.
+Moves the file or directory to the system's recycle bin. See also :ref:`DirAccess.remove<class_DirAccess_method_remove>`.
 
 
-The method takes only global paths, so you may need to use :ref:`ProjectSettings.globalize_path<class_ProjectSettings_method_globalize_path>`. Do not use it for files in ``res://`` as it will not work in exported project.
+The method takes only global paths, so you may need to use :ref:`ProjectSettings.globalize_path<class_ProjectSettings_method_globalize_path>`. Do not use it for files in ``res://`` as it will not work in exported projects.
 
 
 \ **Note:** If the user has disabled the recycle bin on their system, the file will be permanently deleted instead.
 \ **Note:** If the user has disabled the recycle bin on their system, the file will be permanently deleted instead.
 
 
-::
+
+.. tabs::
+
+ .. code-tab:: gdscript
 
 
     var file_to_remove = "user://slot1.sav"
     var file_to_remove = "user://slot1.sav"
     OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))
     OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))
 
 
+ .. code-tab:: csharp
+
+    var fileToRemove = "user://slot1.sav";
+    OS.MoveToTrash(ProjectSettings.GlobalizePath(fileToRemove));
+
+
+
 ----
 ----
 
 
 .. _class_OS_method_open_midi_inputs:
 .. _class_OS_method_open_midi_inputs:
@@ -1008,6 +1048,16 @@ Initialises the singleton for the system MIDI driver.
 
 
 ----
 ----
 
 
+.. _class_OS_method_read_string_from_stdin:
+
+- :ref:`String<class_String>` **read_string_from_stdin** **(** :ref:`bool<class_bool>` block=true **)**
+
+Reads a user input string from the standard input (usually the terminal).
+
+\ **Note:** This method is implemented on Linux, macOS and Windows. Non-blocking reads are not currently supported on any platform.
+
+----
+
 .. _class_OS_method_request_permission:
 .. _class_OS_method_request_permission:
 
 
 - :ref:`bool<class_bool>` **request_permission** **(** :ref:`String<class_String>` name **)**
 - :ref:`bool<class_bool>` **request_permission** **(** :ref:`String<class_String>` name **)**

+ 3 - 3
classes/class_packedbytearray.rst

@@ -226,7 +226,7 @@ Clears the array. This is equivalent to using :ref:`resize<class_PackedByteArray
 
 
 - :ref:`PackedByteArray<class_PackedByteArray>` **compress** **(** :ref:`int<class_int>` compression_mode=0 **)** |const|
 - :ref:`PackedByteArray<class_PackedByteArray>` **compress** **(** :ref:`int<class_int>` compression_mode=0 **)** |const|
 
 
-Returns a new ``PackedByteArray`` with the data compressed. Set the compression mode using one of :ref:`CompressionMode<enum_File_CompressionMode>`'s constants.
+Returns a new ``PackedByteArray`` with the data compressed. Set the compression mode using one of :ref:`CompressionMode<enum_FileAccess_CompressionMode>`'s constants.
 
 
 ----
 ----
 
 
@@ -346,7 +346,7 @@ Decodes a size of a :ref:`Variant<class_Variant>` from the bytes starting at ``b
 
 
 - :ref:`PackedByteArray<class_PackedByteArray>` **decompress** **(** :ref:`int<class_int>` buffer_size, :ref:`int<class_int>` compression_mode=0 **)** |const|
 - :ref:`PackedByteArray<class_PackedByteArray>` **decompress** **(** :ref:`int<class_int>` buffer_size, :ref:`int<class_int>` compression_mode=0 **)** |const|
 
 
-Returns a new ``PackedByteArray`` with the data decompressed. Set ``buffer_size`` to the size of the uncompressed data. Set the compression mode using one of :ref:`CompressionMode<enum_File_CompressionMode>`'s constants.
+Returns a new ``PackedByteArray`` with the data decompressed. Set ``buffer_size`` to the size of the uncompressed data. Set the compression mode using one of :ref:`CompressionMode<enum_FileAccess_CompressionMode>`'s constants.
 
 
 ----
 ----
 
 
@@ -354,7 +354,7 @@ Returns a new ``PackedByteArray`` with the data decompressed. Set ``buffer_size`
 
 
 - :ref:`PackedByteArray<class_PackedByteArray>` **decompress_dynamic** **(** :ref:`int<class_int>` max_output_size, :ref:`int<class_int>` compression_mode=0 **)** |const|
 - :ref:`PackedByteArray<class_PackedByteArray>` **decompress_dynamic** **(** :ref:`int<class_int>` max_output_size, :ref:`int<class_int>` compression_mode=0 **)** |const|
 
 
-Returns a new ``PackedByteArray`` with the data decompressed. Set the compression mode using one of :ref:`CompressionMode<enum_File_CompressionMode>`'s constants. **This method only accepts gzip and deflate compression modes.**\ 
+Returns a new ``PackedByteArray`` with the data decompressed. Set the compression mode using one of :ref:`CompressionMode<enum_FileAccess_CompressionMode>`'s constants. **This method only accepts gzip and deflate compression modes.**\ 
 
 
 This method is potentially slower than ``decompress``, as it may have to re-allocate its output buffer multiple times while decompressing, whereas ``decompress`` knows it's output buffer size from the beginning.
 This method is potentially slower than ``decompress``, as it may have to re-allocate its output buffer multiple times while decompressing, whereas ``decompress`` knows it's output buffer size from the beginning.
 
 

+ 2 - 2
classes/class_packedscene.rst

@@ -67,7 +67,7 @@ Can be used to save a node to a file. When saving, the node as well as all the n
     # Only `node` and `body` are now packed.
     # Only `node` and `body` are now packed.
     var result = scene.pack(node)
     var result = scene.pack(node)
     if result == OK:
     if result == OK:
-        var error = ResourceSaver.save("res://path/name.tscn", scene)  # Or "user://..."
+        var error = ResourceSaver.save(scene, "res://path/name.tscn")  # Or "user://..."
         if error != OK:
         if error != OK:
             push_error("An error occurred while saving the scene to disk.")
             push_error("An error occurred while saving the scene to disk.")
 
 
@@ -90,7 +90,7 @@ Can be used to save a node to a file. When saving, the node as well as all the n
     Error result = scene.Pack(node);
     Error result = scene.Pack(node);
     if (result == Error.Ok)
     if (result == Error.Ok)
     {
     {
-        Error error = ResourceSaver.Save("res://path/name.tscn", scene); // Or "user://..."
+        Error error = ResourceSaver.Save(scene, "res://path/name.tscn"); // Or "user://..."
         if (error != Error.Ok)
         if (error != Error.Ok)
         {
         {
             GD.PushError("An error occurred while saving the scene to disk.");
             GD.PushError("An error occurred while saving the scene to disk.");

+ 2 - 2
classes/class_panoramaskymaterial.rst

@@ -17,11 +17,11 @@ A :ref:`Material<class_Material>` used with :ref:`Sky<class_Sky>` to draw a back
 Description
 Description
 -----------
 -----------
 
 
-A resource referenced in a :ref:`Sky<class_Sky>` that is used to draw a background. The Panorama sky material functions similar to skyboxes in other engines, except it uses an equirectangular sky map instead of a cube map.
+A resource referenced in a :ref:`Sky<class_Sky>` that is used to draw a background. The Panorama sky material functions similar to skyboxes in other engines, except it uses an equirectangular sky map instead of a cubemap.
 
 
 Using an HDR panorama is strongly recommended for accurate, high-quality reflections. Godot supports the Radiance HDR (``.hdr``) and OpenEXR (``.exr``) image formats for this purpose.
 Using an HDR panorama is strongly recommended for accurate, high-quality reflections. Godot supports the Radiance HDR (``.hdr``) and OpenEXR (``.exr``) image formats for this purpose.
 
 
-You can use `this tool <https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/cubemap_to_panorama.html>`__ to convert a cube map to an equirectangular sky map.
+You can use `this tool <https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/cubemap_to_panorama.html>`__ to convert a cubemap to an equirectangular sky map.
 
 
 Properties
 Properties
 ----------
 ----------

+ 17 - 13
classes/class_physicsbody2d.rst

@@ -36,17 +36,17 @@ Properties
 Methods
 Methods
 -------
 -------
 
 
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                    | :ref:`add_collision_exception_with<class_PhysicsBody2D_method_add_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                     |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PhysicsBody2D[]<class_PhysicsBody2D>`             | :ref:`get_collision_exceptions<class_PhysicsBody2D_method_get_collision_exceptions>` **(** **)**                                                                                                                                                                          |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`KinematicCollision2D<class_KinematicCollision2D>` | :ref:`move_and_collide<class_PhysicsBody2D_method_move_and_collide>` **(** :ref:`Vector2<class_Vector2>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.08 **)**                                                              |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                    | :ref:`remove_collision_exception_with<class_PhysicsBody2D_method_remove_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                               |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                                 | :ref:`test_move<class_PhysicsBody2D_method_test_move>` **(** :ref:`Transform2D<class_Transform2D>` from, :ref:`Vector2<class_Vector2>` distance, :ref:`KinematicCollision2D<class_KinematicCollision2D>` collision=null, :ref:`float<class_float>` safe_margin=0.08 **)** |
-+---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                    | :ref:`add_collision_exception_with<class_PhysicsBody2D_method_add_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                                                                          |
++---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PhysicsBody2D[]<class_PhysicsBody2D>`             | :ref:`get_collision_exceptions<class_PhysicsBody2D_method_get_collision_exceptions>` **(** **)**                                                                                                                                                                                                                               |
++---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`KinematicCollision2D<class_KinematicCollision2D>` | :ref:`move_and_collide<class_PhysicsBody2D_method_move_and_collide>` **(** :ref:`Vector2<class_Vector2>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.08, :ref:`bool<class_bool>` recovery_as_collision=false **)**                                                              |
++---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                    | :ref:`remove_collision_exception_with<class_PhysicsBody2D_method_remove_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                                                                    |
++---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                                 | :ref:`test_move<class_PhysicsBody2D_method_test_move>` **(** :ref:`Transform2D<class_Transform2D>` from, :ref:`Vector2<class_Vector2>` distance, :ref:`KinematicCollision2D<class_KinematicCollision2D>` collision=null, :ref:`float<class_float>` safe_margin=0.08, :ref:`bool<class_bool>` recovery_as_collision=false **)** |
++---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
@@ -69,7 +69,7 @@ Returns an array of nodes that were added as collision exceptions for this body.
 
 
 .. _class_PhysicsBody2D_method_move_and_collide:
 .. _class_PhysicsBody2D_method_move_and_collide:
 
 
-- :ref:`KinematicCollision2D<class_KinematicCollision2D>` **move_and_collide** **(** :ref:`Vector2<class_Vector2>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.08 **)**
+- :ref:`KinematicCollision2D<class_KinematicCollision2D>` **move_and_collide** **(** :ref:`Vector2<class_Vector2>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.08, :ref:`bool<class_bool>` recovery_as_collision=false **)**
 
 
 Moves the body along the vector ``distance``. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 Moves the body along the vector ``distance``. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 
 
@@ -79,6 +79,8 @@ If ``test_only`` is ``true``, the body does not move but the would-be collision
 
 
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody2D.safe_margin<class_CharacterBody2D_property_safe_margin>` for more details).
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody2D.safe_margin<class_CharacterBody2D_property_safe_margin>` for more details).
 
 
+If ``recovery_as_collision`` is ``true``, any depenetration from the recovery phase is also reported as a collision; this is used e.g. by :ref:`CharacterBody2D<class_CharacterBody2D>` for improving floor detection during floor snapping.
+
 ----
 ----
 
 
 .. _class_PhysicsBody2D_method_remove_collision_exception_with:
 .. _class_PhysicsBody2D_method_remove_collision_exception_with:
@@ -91,7 +93,7 @@ Removes a body from the list of bodies that this body can't collide with.
 
 
 .. _class_PhysicsBody2D_method_test_move:
 .. _class_PhysicsBody2D_method_test_move:
 
 
-- :ref:`bool<class_bool>` **test_move** **(** :ref:`Transform2D<class_Transform2D>` from, :ref:`Vector2<class_Vector2>` distance, :ref:`KinematicCollision2D<class_KinematicCollision2D>` collision=null, :ref:`float<class_float>` safe_margin=0.08 **)**
+- :ref:`bool<class_bool>` **test_move** **(** :ref:`Transform2D<class_Transform2D>` from, :ref:`Vector2<class_Vector2>` distance, :ref:`KinematicCollision2D<class_KinematicCollision2D>` collision=null, :ref:`float<class_float>` safe_margin=0.08, :ref:`bool<class_bool>` recovery_as_collision=false **)**
 
 
 Checks for collisions without moving the body. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 Checks for collisions without moving the body. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 
 
@@ -101,6 +103,8 @@ Virtually sets the node's position, scale and rotation to that of the given :ref
 
 
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody2D.safe_margin<class_CharacterBody2D_property_safe_margin>` for more details).
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody2D.safe_margin<class_CharacterBody2D_property_safe_margin>` for more details).
 
 
+If ``recovery_as_collision`` is ``true``, any depenetration from the recovery phase is also reported as a collision; this is useful for checking whether the body would *touch* any other bodies.
+
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |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.)`
 .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`

+ 21 - 17
classes/class_physicsbody3d.rst

@@ -46,21 +46,21 @@ Properties
 Methods
 Methods
 -------
 -------
 
 
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                    | :ref:`add_collision_exception_with<class_PhysicsBody3D_method_add_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                                                              |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                                 | :ref:`get_axis_lock<class_PhysicsBody3D_method_get_axis_lock>` **(** :ref:`BodyAxis<enum_PhysicsServer3D_BodyAxis>` axis **)** |const|                                                                                                                                                                             |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`PhysicsBody3D[]<class_PhysicsBody3D>`             | :ref:`get_collision_exceptions<class_PhysicsBody3D_method_get_collision_exceptions>` **(** **)**                                                                                                                                                                                                                   |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`KinematicCollision3D<class_KinematicCollision3D>` | :ref:`move_and_collide<class_PhysicsBody3D_method_move_and_collide>` **(** :ref:`Vector3<class_Vector3>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.001, :ref:`int<class_int>` max_collisions=1 **)**                                                              |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                    | :ref:`remove_collision_exception_with<class_PhysicsBody3D_method_remove_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                                                        |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                    | :ref:`set_axis_lock<class_PhysicsBody3D_method_set_axis_lock>` **(** :ref:`BodyAxis<enum_PhysicsServer3D_BodyAxis>` axis, :ref:`bool<class_bool>` lock **)**                                                                                                                                                       |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| :ref:`bool<class_bool>`                                 | :ref:`test_move<class_PhysicsBody3D_method_test_move>` **(** :ref:`Transform3D<class_Transform3D>` from, :ref:`Vector3<class_Vector3>` distance, :ref:`KinematicCollision3D<class_KinematicCollision3D>` collision=null, :ref:`float<class_float>` safe_margin=0.001, :ref:`int<class_int>` max_collisions=1 **)** |
-+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                    | :ref:`add_collision_exception_with<class_PhysicsBody3D_method_add_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                                                                                                                   |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                                 | :ref:`get_axis_lock<class_PhysicsBody3D_method_get_axis_lock>` **(** :ref:`BodyAxis<enum_PhysicsServer3D_BodyAxis>` axis **)** |const|                                                                                                                                                                                                                                  |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`PhysicsBody3D[]<class_PhysicsBody3D>`             | :ref:`get_collision_exceptions<class_PhysicsBody3D_method_get_collision_exceptions>` **(** **)**                                                                                                                                                                                                                                                                        |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`KinematicCollision3D<class_KinematicCollision3D>` | :ref:`move_and_collide<class_PhysicsBody3D_method_move_and_collide>` **(** :ref:`Vector3<class_Vector3>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.001, :ref:`bool<class_bool>` recovery_as_collision=false, :ref:`int<class_int>` max_collisions=1 **)**                                                              |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                    | :ref:`remove_collision_exception_with<class_PhysicsBody3D_method_remove_collision_exception_with>` **(** :ref:`Node<class_Node>` body **)**                                                                                                                                                                                                                             |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| void                                                    | :ref:`set_axis_lock<class_PhysicsBody3D_method_set_axis_lock>` **(** :ref:`BodyAxis<enum_PhysicsServer3D_BodyAxis>` axis, :ref:`bool<class_bool>` lock **)**                                                                                                                                                                                                            |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`bool<class_bool>`                                 | :ref:`test_move<class_PhysicsBody3D_method_test_move>` **(** :ref:`Transform3D<class_Transform3D>` from, :ref:`Vector3<class_Vector3>` distance, :ref:`KinematicCollision3D<class_KinematicCollision3D>` collision=null, :ref:`float<class_float>` safe_margin=0.001, :ref:`bool<class_bool>` recovery_as_collision=false, :ref:`int<class_int>` max_collisions=1 **)** |
++---------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
@@ -188,7 +188,7 @@ Returns an array of nodes that were added as collision exceptions for this body.
 
 
 .. _class_PhysicsBody3D_method_move_and_collide:
 .. _class_PhysicsBody3D_method_move_and_collide:
 
 
-- :ref:`KinematicCollision3D<class_KinematicCollision3D>` **move_and_collide** **(** :ref:`Vector3<class_Vector3>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.001, :ref:`int<class_int>` max_collisions=1 **)**
+- :ref:`KinematicCollision3D<class_KinematicCollision3D>` **move_and_collide** **(** :ref:`Vector3<class_Vector3>` distance, :ref:`bool<class_bool>` test_only=false, :ref:`float<class_float>` safe_margin=0.001, :ref:`bool<class_bool>` recovery_as_collision=false, :ref:`int<class_int>` max_collisions=1 **)**
 
 
 Moves the body along the vector ``distance``. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 Moves the body along the vector ``distance``. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 
 
@@ -198,6 +198,8 @@ If ``test_only`` is ``true``, the body does not move but the would-be collision
 
 
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody3D.safe_margin<class_CharacterBody3D_property_safe_margin>` for more details).
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody3D.safe_margin<class_CharacterBody3D_property_safe_margin>` for more details).
 
 
+If ``recovery_as_collision`` is ``true``, any depenetration from the recovery phase is also reported as a collision; this is used e.g. by :ref:`CharacterBody3D<class_CharacterBody3D>` for improving floor detection during floor snapping.
+
 \ ``max_collisions`` allows to retrieve more than one collision result.
 \ ``max_collisions`` allows to retrieve more than one collision result.
 
 
 ----
 ----
@@ -220,7 +222,7 @@ Locks or unlocks the specified linear or rotational ``axis`` depending on the va
 
 
 .. _class_PhysicsBody3D_method_test_move:
 .. _class_PhysicsBody3D_method_test_move:
 
 
-- :ref:`bool<class_bool>` **test_move** **(** :ref:`Transform3D<class_Transform3D>` from, :ref:`Vector3<class_Vector3>` distance, :ref:`KinematicCollision3D<class_KinematicCollision3D>` collision=null, :ref:`float<class_float>` safe_margin=0.001, :ref:`int<class_int>` max_collisions=1 **)**
+- :ref:`bool<class_bool>` **test_move** **(** :ref:`Transform3D<class_Transform3D>` from, :ref:`Vector3<class_Vector3>` distance, :ref:`KinematicCollision3D<class_KinematicCollision3D>` collision=null, :ref:`float<class_float>` safe_margin=0.001, :ref:`bool<class_bool>` recovery_as_collision=false, :ref:`int<class_int>` max_collisions=1 **)**
 
 
 Checks for collisions without moving the body. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 Checks for collisions without moving the body. In order to be frame rate independent in :ref:`Node._physics_process<class_Node_method__physics_process>` or :ref:`Node._process<class_Node_method__process>`, ``distance`` should be computed using ``delta``.
 
 
@@ -230,6 +232,8 @@ Virtually sets the node's position, scale and rotation to that of the given :ref
 
 
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody3D.safe_margin<class_CharacterBody3D_property_safe_margin>` for more details).
 \ ``safe_margin`` is the extra margin used for collision recovery (see :ref:`CharacterBody3D.safe_margin<class_CharacterBody3D_property_safe_margin>` for more details).
 
 
+If ``recovery_as_collision`` is ``true``, any depenetration from the recovery phase is also reported as a collision; this is useful for checking whether the body would *touch* any other bodies.
+
 \ ``max_collisions`` allows to retrieve more than one collision result.
 \ ``max_collisions`` allows to retrieve more than one collision result.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`

+ 14 - 0
classes/class_physicsdirectbodystate3d.rst

@@ -40,6 +40,8 @@ Properties
 +---------------------------------------+-----------------------------------------------------------------------------------------------+
 +---------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Vector3<class_Vector3>`         | :ref:`inverse_inertia<class_PhysicsDirectBodyState3D_property_inverse_inertia>`               |
 | :ref:`Vector3<class_Vector3>`         | :ref:`inverse_inertia<class_PhysicsDirectBodyState3D_property_inverse_inertia>`               |
 +---------------------------------------+-----------------------------------------------------------------------------------------------+
 +---------------------------------------+-----------------------------------------------------------------------------------------------+
+| :ref:`Basis<class_Basis>`             | :ref:`inverse_inertia_tensor<class_PhysicsDirectBodyState3D_property_inverse_inertia_tensor>` |
++---------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`float<class_float>`             | :ref:`inverse_mass<class_PhysicsDirectBodyState3D_property_inverse_mass>`                     |
 | :ref:`float<class_float>`             | :ref:`inverse_mass<class_PhysicsDirectBodyState3D_property_inverse_mass>`                     |
 +---------------------------------------+-----------------------------------------------------------------------------------------------+
 +---------------------------------------+-----------------------------------------------------------------------------------------------+
 | :ref:`Vector3<class_Vector3>`         | :ref:`linear_velocity<class_PhysicsDirectBodyState3D_property_linear_velocity>`               |
 | :ref:`Vector3<class_Vector3>`         | :ref:`linear_velocity<class_PhysicsDirectBodyState3D_property_linear_velocity>`               |
@@ -171,6 +173,18 @@ The inverse of the inertia of the body.
 
 
 ----
 ----
 
 
+.. _class_PhysicsDirectBodyState3D_property_inverse_inertia_tensor:
+
+- :ref:`Basis<class_Basis>` **inverse_inertia_tensor**
+
++----------+------------------------------+
+| *Getter* | get_inverse_inertia_tensor() |
++----------+------------------------------+
+
+The inverse of the inertia tensor of the body.
+
+----
+
 .. _class_PhysicsDirectBodyState3D_property_inverse_mass:
 .. _class_PhysicsDirectBodyState3D_property_inverse_mass:
 
 
 - :ref:`float<class_float>` **inverse_mass**
 - :ref:`float<class_float>` **inverse_mass**

+ 8 - 0
classes/class_physicsdirectbodystate3dextension.rst

@@ -70,6 +70,8 @@ Methods
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Vector3<class_Vector3>`                                     | :ref:`_get_inverse_inertia<class_PhysicsDirectBodyState3DExtension_method__get_inverse_inertia>` **(** **)** |virtual| |const|                                                                               |
 | :ref:`Vector3<class_Vector3>`                                     | :ref:`_get_inverse_inertia<class_PhysicsDirectBodyState3DExtension_method__get_inverse_inertia>` **(** **)** |virtual| |const|                                                                               |
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`Basis<class_Basis>`                                         | :ref:`_get_inverse_inertia_tensor<class_PhysicsDirectBodyState3DExtension_method__get_inverse_inertia_tensor>` **(** **)** |virtual| |const|                                                                 |
++-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`float<class_float>`                                         | :ref:`_get_inverse_mass<class_PhysicsDirectBodyState3DExtension_method__get_inverse_mass>` **(** **)** |virtual| |const|                                                                                     |
 | :ref:`float<class_float>`                                         | :ref:`_get_inverse_mass<class_PhysicsDirectBodyState3DExtension_method__get_inverse_mass>` **(** **)** |virtual| |const|                                                                                     |
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Vector3<class_Vector3>`                                     | :ref:`_get_linear_velocity<class_PhysicsDirectBodyState3DExtension_method__get_linear_velocity>` **(** **)** |virtual| |const|                                                                               |
 | :ref:`Vector3<class_Vector3>`                                     | :ref:`_get_linear_velocity<class_PhysicsDirectBodyState3DExtension_method__get_linear_velocity>` **(** **)** |virtual| |const|                                                                               |
@@ -266,6 +268,12 @@ Method Descriptions
 
 
 ----
 ----
 
 
+.. _class_PhysicsDirectBodyState3DExtension_method__get_inverse_inertia_tensor:
+
+- :ref:`Basis<class_Basis>` **_get_inverse_inertia_tensor** **(** **)** |virtual| |const|
+
+----
+
 .. _class_PhysicsDirectBodyState3DExtension_method__get_inverse_mass:
 .. _class_PhysicsDirectBodyState3DExtension_method__get_inverse_mass:
 
 
 - :ref:`float<class_float>` **_get_inverse_mass** **(** **)** |virtual| |const|
 - :ref:`float<class_float>` **_get_inverse_mass** **(** **)** |virtual| |const|

+ 20 - 0
classes/class_physicsserver2d.rst

@@ -37,6 +37,10 @@ Methods
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                                             | :ref:`area_get_canvas_instance_id<class_PhysicsServer2D_method_area_get_canvas_instance_id>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                            |
 | :ref:`int<class_int>`                                             | :ref:`area_get_canvas_instance_id<class_PhysicsServer2D_method_area_get_canvas_instance_id>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                            |
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`area_get_collision_layer<class_PhysicsServer2D_method_area_get_collision_layer>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                                  |
++-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`area_get_collision_mask<class_PhysicsServer2D_method_area_get_collision_mask>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                                    |
++-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                                             | :ref:`area_get_object_instance_id<class_PhysicsServer2D_method_area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                            |
 | :ref:`int<class_int>`                                             | :ref:`area_get_object_instance_id<class_PhysicsServer2D_method_area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                            |
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Variant<class_Variant>`                                     | :ref:`area_get_param<class_PhysicsServer2D_method_area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer2D_AreaParameter>` param **)** |const|                                                                                                                      |
 | :ref:`Variant<class_Variant>`                                     | :ref:`area_get_param<class_PhysicsServer2D_method_area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer2D_AreaParameter>` param **)** |const|                                                                                                                      |
@@ -684,6 +688,22 @@ Creates an :ref:`Area2D<class_Area2D>`. After creating an :ref:`Area2D<class_Are
 
 
 ----
 ----
 
 
+.. _class_PhysicsServer2D_method_area_get_collision_layer:
+
+- :ref:`int<class_int>` **area_get_collision_layer** **(** :ref:`RID<class_RID>` area **)** |const|
+
+Returns the physics layer or layers an area belongs to.
+
+----
+
+.. _class_PhysicsServer2D_method_area_get_collision_mask:
+
+- :ref:`int<class_int>` **area_get_collision_mask** **(** :ref:`RID<class_RID>` area **)** |const|
+
+Returns the physics layer or layers an area can contact with.
+
+----
+
 .. _class_PhysicsServer2D_method_area_get_object_instance_id:
 .. _class_PhysicsServer2D_method_area_get_object_instance_id:
 
 
 - :ref:`int<class_int>` **area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |const|
 - :ref:`int<class_int>` **area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |const|

+ 18 - 2
classes/class_physicsserver2dextension.rst

@@ -30,6 +30,10 @@ Methods
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                                             | :ref:`_area_get_canvas_instance_id<class_PhysicsServer2DExtension_method__area_get_canvas_instance_id>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                                     |
 | :ref:`int<class_int>`                                             | :ref:`_area_get_canvas_instance_id<class_PhysicsServer2DExtension_method__area_get_canvas_instance_id>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                                     |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`_area_get_collision_layer<class_PhysicsServer2DExtension_method__area_get_collision_layer>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                                           |
++-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`_area_get_collision_mask<class_PhysicsServer2DExtension_method__area_get_collision_mask>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                                             |
++-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                                             | :ref:`_area_get_object_instance_id<class_PhysicsServer2DExtension_method__area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                                     |
 | :ref:`int<class_int>`                                             | :ref:`_area_get_object_instance_id<class_PhysicsServer2DExtension_method__area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                                     |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Variant<class_Variant>`                                     | :ref:`_area_get_param<class_PhysicsServer2DExtension_method__area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer2D_AreaParameter>` param **)** |virtual| |const|                                                                                                                                                                                                               |
 | :ref:`Variant<class_Variant>`                                     | :ref:`_area_get_param<class_PhysicsServer2DExtension_method__area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer2D_AreaParameter>` param **)** |virtual| |const|                                                                                                                                                                                                               |
@@ -188,7 +192,7 @@ Methods
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                              | :ref:`_body_set_state<class_PhysicsServer2DExtension_method__body_set_state>` **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer2D_BodyState>` state, :ref:`Variant<class_Variant>` value **)** |virtual|                                                                                                                                                                                          |
 | void                                                              | :ref:`_body_set_state<class_PhysicsServer2DExtension_method__body_set_state>` **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer2D_BodyState>` state, :ref:`Variant<class_Variant>` value **)** |virtual|                                                                                                                                                                                          |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                              | :ref:`_body_set_state_sync_callback<class_PhysicsServer2DExtension_method__body_set_state_sync_callback>` **(** :ref:`RID<class_RID>` body, PhysicsServer2DExtensionStateCallback* callback **)** |virtual|                                                                                                                                                                                                          |
+| void                                                              | :ref:`_body_set_state_sync_callback<class_PhysicsServer2DExtension_method__body_set_state_sync_callback>` **(** :ref:`RID<class_RID>` body, :ref:`Callable<class_Callable>` callable **)** |virtual|                                                                                                                                                                                                                 |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`bool<class_bool>`                                           | :ref:`_body_test_motion<class_PhysicsServer2DExtension_method__body_test_motion>` **(** :ref:`RID<class_RID>` body, :ref:`Transform2D<class_Transform2D>` from, :ref:`Vector2<class_Vector2>` motion, :ref:`float<class_float>` margin, :ref:`bool<class_bool>` collide_separation_ray, :ref:`bool<class_bool>` recovery_as_collision, PhysicsServer2DExtensionMotionResult* result **)** |virtual| |const|          |
 | :ref:`bool<class_bool>`                                           | :ref:`_body_test_motion<class_PhysicsServer2DExtension_method__body_test_motion>` **(** :ref:`RID<class_RID>` body, :ref:`Transform2D<class_Transform2D>` from, :ref:`Vector2<class_Vector2>` motion, :ref:`float<class_float>` margin, :ref:`bool<class_bool>` collide_separation_ray, :ref:`bool<class_bool>` recovery_as_collision, PhysicsServer2DExtensionMotionResult* result **)** |virtual| |const|          |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -326,6 +330,18 @@ Method Descriptions
 
 
 ----
 ----
 
 
+.. _class_PhysicsServer2DExtension_method__area_get_collision_layer:
+
+- :ref:`int<class_int>` **_area_get_collision_layer** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
+
+----
+
+.. _class_PhysicsServer2DExtension_method__area_get_collision_mask:
+
+- :ref:`int<class_int>` **_area_get_collision_mask** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
+
+----
+
 .. _class_PhysicsServer2DExtension_method__area_get_object_instance_id:
 .. _class_PhysicsServer2DExtension_method__area_get_object_instance_id:
 
 
 - :ref:`int<class_int>` **_area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
 - :ref:`int<class_int>` **_area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
@@ -802,7 +818,7 @@ Method Descriptions
 
 
 .. _class_PhysicsServer2DExtension_method__body_set_state_sync_callback:
 .. _class_PhysicsServer2DExtension_method__body_set_state_sync_callback:
 
 
-- void **_body_set_state_sync_callback** **(** :ref:`RID<class_RID>` body, PhysicsServer2DExtensionStateCallback* callback **)** |virtual|
+- void **_body_set_state_sync_callback** **(** :ref:`RID<class_RID>` body, :ref:`Callable<class_Callable>` callable **)** |virtual|
 
 
 ----
 ----
 
 

+ 20 - 0
classes/class_physicsserver3d.rst

@@ -33,6 +33,10 @@ Methods
 +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`RID<class_RID>`                                             | :ref:`area_create<class_PhysicsServer3D_method_area_create>` **(** **)**                                                                                                                                                                                                                       |
 | :ref:`RID<class_RID>`                                             | :ref:`area_create<class_PhysicsServer3D_method_area_create>` **(** **)**                                                                                                                                                                                                                       |
 +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`area_get_collision_layer<class_PhysicsServer3D_method_area_get_collision_layer>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                          |
++-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`area_get_collision_mask<class_PhysicsServer3D_method_area_get_collision_mask>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                            |
++-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                                             | :ref:`area_get_object_instance_id<class_PhysicsServer3D_method_area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                    |
 | :ref:`int<class_int>`                                             | :ref:`area_get_object_instance_id<class_PhysicsServer3D_method_area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |const|                                                                                                                                                    |
 +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Variant<class_Variant>`                                     | :ref:`area_get_param<class_PhysicsServer3D_method_area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer3D_AreaParameter>` param **)** |const|                                                                                                              |
 | :ref:`Variant<class_Variant>`                                     | :ref:`area_get_param<class_PhysicsServer3D_method_area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer3D_AreaParameter>` param **)** |const|                                                                                                              |
@@ -1006,6 +1010,22 @@ Creates an :ref:`Area3D<class_Area3D>`.
 
 
 ----
 ----
 
 
+.. _class_PhysicsServer3D_method_area_get_collision_layer:
+
+- :ref:`int<class_int>` **area_get_collision_layer** **(** :ref:`RID<class_RID>` area **)** |const|
+
+Returns the physics layer or layers an area belongs to.
+
+----
+
+.. _class_PhysicsServer3D_method_area_get_collision_mask:
+
+- :ref:`int<class_int>` **area_get_collision_mask** **(** :ref:`RID<class_RID>` area **)** |const|
+
+Returns the physics layer or layers an area can contact with.
+
+----
+
 .. _class_PhysicsServer3D_method_area_get_object_instance_id:
 .. _class_PhysicsServer3D_method_area_get_object_instance_id:
 
 
 - :ref:`int<class_int>` **area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |const|
 - :ref:`int<class_int>` **area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |const|

+ 18 - 2
classes/class_physicsserver3dextension.rst

@@ -26,6 +26,10 @@ Methods
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`RID<class_RID>`                                             | :ref:`_area_create<class_PhysicsServer3DExtension_method__area_create>` **(** **)** |virtual|                                                                                                                                                                                                                                                                                                      |
 | :ref:`RID<class_RID>`                                             | :ref:`_area_create<class_PhysicsServer3DExtension_method__area_create>` **(** **)** |virtual|                                                                                                                                                                                                                                                                                                      |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`_area_get_collision_layer<class_PhysicsServer3DExtension_method__area_get_collision_layer>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                         |
++-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| :ref:`int<class_int>`                                             | :ref:`_area_get_collision_mask<class_PhysicsServer3DExtension_method__area_get_collision_mask>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                           |
++-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`int<class_int>`                                             | :ref:`_area_get_object_instance_id<class_PhysicsServer3DExtension_method__area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                   |
 | :ref:`int<class_int>`                                             | :ref:`_area_get_object_instance_id<class_PhysicsServer3DExtension_method__area_get_object_instance_id>` **(** :ref:`RID<class_RID>` area **)** |virtual| |const|                                                                                                                                                                                                                                   |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | :ref:`Variant<class_Variant>`                                     | :ref:`_area_get_param<class_PhysicsServer3DExtension_method__area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer3D_AreaParameter>` param **)** |virtual| |const|                                                                                                                                                                                             |
 | :ref:`Variant<class_Variant>`                                     | :ref:`_area_get_param<class_PhysicsServer3DExtension_method__area_get_param>` **(** :ref:`RID<class_RID>` area, :ref:`AreaParameter<enum_PhysicsServer3D_AreaParameter>` param **)** |virtual| |const|                                                                                                                                                                                             |
@@ -182,7 +186,7 @@ Methods
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                              | :ref:`_body_set_state<class_PhysicsServer3DExtension_method__body_set_state>` **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer3D_BodyState>` state, :ref:`Variant<class_Variant>` value **)** |virtual|                                                                                                                                                                        |
 | void                                                              | :ref:`_body_set_state<class_PhysicsServer3DExtension_method__body_set_state>` **(** :ref:`RID<class_RID>` body, :ref:`BodyState<enum_PhysicsServer3D_BodyState>` state, :ref:`Variant<class_Variant>` value **)** |virtual|                                                                                                                                                                        |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| void                                                              | :ref:`_body_set_state_sync_callback<class_PhysicsServer3DExtension_method__body_set_state_sync_callback>` **(** :ref:`RID<class_RID>` body, PhysicsServer3DExtensionStateCallback* callback **)** |virtual|                                                                                                                                                                                        |
+| void                                                              | :ref:`_body_set_state_sync_callback<class_PhysicsServer3DExtension_method__body_set_state_sync_callback>` **(** :ref:`RID<class_RID>` body, :ref:`Callable<class_Callable>` callable **)** |virtual|                                                                                                                                                                                               |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 | void                                                              | :ref:`_body_set_user_flags<class_PhysicsServer3DExtension_method__body_set_user_flags>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` flags **)** |virtual|                                                                                                                                                                                                                              |
 | void                                                              | :ref:`_body_set_user_flags<class_PhysicsServer3DExtension_method__body_set_user_flags>` **(** :ref:`RID<class_RID>` body, :ref:`int<class_int>` flags **)** |virtual|                                                                                                                                                                                                                              |
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -414,6 +418,18 @@ Method Descriptions
 
 
 ----
 ----
 
 
+.. _class_PhysicsServer3DExtension_method__area_get_collision_layer:
+
+- :ref:`int<class_int>` **_area_get_collision_layer** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
+
+----
+
+.. _class_PhysicsServer3DExtension_method__area_get_collision_mask:
+
+- :ref:`int<class_int>` **_area_get_collision_mask** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
+
+----
+
 .. _class_PhysicsServer3DExtension_method__area_get_object_instance_id:
 .. _class_PhysicsServer3DExtension_method__area_get_object_instance_id:
 
 
 - :ref:`int<class_int>` **_area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
 - :ref:`int<class_int>` **_area_get_object_instance_id** **(** :ref:`RID<class_RID>` area **)** |virtual| |const|
@@ -884,7 +900,7 @@ Method Descriptions
 
 
 .. _class_PhysicsServer3DExtension_method__body_set_state_sync_callback:
 .. _class_PhysicsServer3DExtension_method__body_set_state_sync_callback:
 
 
-- void **_body_set_state_sync_callback** **(** :ref:`RID<class_RID>` body, PhysicsServer3DExtensionStateCallback* callback **)** |virtual|
+- void **_body_set_state_sync_callback** **(** :ref:`RID<class_RID>` body, :ref:`Callable<class_Callable>` callable **)** |virtual|
 
 
 ----
 ----
 
 

+ 2 - 2
classes/class_physicstestmotionparameters2d.rst

@@ -151,9 +151,9 @@ Motion vector to define the length and direction of the motion to test.
 | *Getter*  | is_recovery_as_collision_enabled()       |
 | *Getter*  | is_recovery_as_collision_enabled()       |
 +-----------+------------------------------------------+
 +-----------+------------------------------------------+
 
 
-If set to ``true``, any depenetration from the recovery phase is reported as a collision; this is used e.g. by :ref:`CharacterBody2D.move_and_slide<class_CharacterBody2D_method_move_and_slide>` for improving floor detection when floor snapping is disabled.
+If set to ``true``, any depenetration from the recovery phase is reported as a collision; this is used e.g. by :ref:`CharacterBody2D<class_CharacterBody2D>` for improving floor detection during floor snapping.
 
 
-If set to ``false``, only collisions resulting from the motion are reported; this is used e.g. by :ref:`PhysicsBody2D.move_and_collide<class_PhysicsBody2D_method_move_and_collide>`.
+If set to ``false``, only collisions resulting from the motion are reported, which is generally the desired behaviour.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 2 - 2
classes/class_physicstestmotionparameters3d.rst

@@ -169,9 +169,9 @@ Motion vector to define the length and direction of the motion to test.
 | *Getter*  | is_recovery_as_collision_enabled()       |
 | *Getter*  | is_recovery_as_collision_enabled()       |
 +-----------+------------------------------------------+
 +-----------+------------------------------------------+
 
 
-If set to ``true``, any depenetration from the recovery phase is reported as a collision; this is used e.g. by :ref:`CharacterBody3D.move_and_slide<class_CharacterBody3D_method_move_and_slide>` for improving floor detection when floor snapping is disabled.
+If set to ``true``, any depenetration from the recovery phase is reported as a collision; this is used e.g. by :ref:`CharacterBody3D<class_CharacterBody3D>` for improving floor detection during floor snapping.
 
 
-If set to ``false``, only collisions resulting from the motion are detected; this is used e.g. by :ref:`PhysicsBody3D.move_and_collide<class_PhysicsBody3D_method_move_and_collide>`.
+If set to ``false``, only collisions resulting from the motion are reported, which is generally the desired behaviour.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 4 - 2
classes/class_planemesh.rst

@@ -12,6 +12,8 @@ PlaneMesh
 
 
 **Inherits:** :ref:`PrimitiveMesh<class_PrimitiveMesh>` **<** :ref:`Mesh<class_Mesh>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 **Inherits:** :ref:`PrimitiveMesh<class_PrimitiveMesh>` **<** :ref:`Mesh<class_Mesh>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
 
 
+**Inherited By:** :ref:`QuadMesh<class_QuadMesh>`
+
 Class representing a planar :ref:`PrimitiveMesh<class_PrimitiveMesh>`.
 Class representing a planar :ref:`PrimitiveMesh<class_PrimitiveMesh>`.
 
 
 Description
 Description
@@ -51,9 +53,9 @@ enum **Orientation**:
 
 
 - **FACE_X** = **0** --- ``PlaneMesh`` will face the positive X-axis.
 - **FACE_X** = **0** --- ``PlaneMesh`` will face the positive X-axis.
 
 
-- **FACE_Y** = **1** --- ``PlaneMesh`` will face the positive Y-axis. This matches the behaviour of the ``PlaneMesh`` in Godot 3.x.
+- **FACE_Y** = **1** --- ``PlaneMesh`` will face the positive Y-axis. This matches the behavior of the ``PlaneMesh`` in Godot 3.x.
 
 
-- **FACE_Z** = **2** --- ``PlaneMesh`` will face the positive Z-axis. This matches the behvaiour of the QuadMesh in Godot 3.x.
+- **FACE_Z** = **2** --- ``PlaneMesh`` will face the positive Z-axis. This matches the behavior of the QuadMesh in Godot 3.x.
 
 
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------

文件差異過大導致無法顯示
+ 344 - 74
classes/class_projectsettings.rst


+ 43 - 0
classes/class_quadmesh.rst

@@ -0,0 +1,43 @@
+:github_url: hide
+
+.. DO NOT EDIT THIS FILE!!!
+.. Generated automatically from Godot engine sources.
+.. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
+.. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/QuadMesh.xml.
+
+.. _class_QuadMesh:
+
+QuadMesh
+========
+
+**Inherits:** :ref:`PlaneMesh<class_PlaneMesh>` **<** :ref:`PrimitiveMesh<class_PrimitiveMesh>` **<** :ref:`Mesh<class_Mesh>` **<** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
+
+Class representing a square mesh facing the camera.
+
+Description
+-----------
+
+Class representing a square :ref:`PrimitiveMesh<class_PrimitiveMesh>`. This flat mesh does not have a thickness. By default, this mesh is aligned on the X and Y axes; this rotation is more suited for use with billboarded materials. A ``QuadMesh`` is equivalent to a :ref:`PlaneMesh<class_PlaneMesh>` except its default :ref:`PlaneMesh.orientation<class_PlaneMesh_property_orientation>` is :ref:`PlaneMesh.FACE_Z<class_PlaneMesh_constant_FACE_Z>`.
+
+Tutorials
+---------
+
+- `GUI in 3D Demo <https://godotengine.org/asset-library/asset/127>`__
+
+- `2D in 3D Demo <https://godotengine.org/asset-library/asset/129>`__
+
+Properties
+----------
+
++------------------------------------------------+-------------+-------------------------------------------------------------------------------+
+| :ref:`Orientation<enum_PlaneMesh_Orientation>` | orientation | ``2`` (overrides :ref:`PlaneMesh<class_PlaneMesh_property_orientation>`)      |
++------------------------------------------------+-------------+-------------------------------------------------------------------------------+
+| :ref:`Vector2<class_Vector2>`                  | size        | ``Vector2(1, 1)`` (overrides :ref:`PlaneMesh<class_PlaneMesh_property_size>`) |
++------------------------------------------------+-------------+-------------------------------------------------------------------------------+
+
+.. |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.)`
+.. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
+.. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
+.. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`

+ 1 - 1
classes/class_quaternion.rst

@@ -244,7 +244,7 @@ Method Descriptions
 
 
 Returns the angle between this quaternion and ``to``. This is the magnitude of the angle you would need to rotate by to get from one to the other.
 Returns the angle between this quaternion and ``to``. This is the magnitude of the angle you would need to rotate by to get from one to the other.
 
 
-\ **Note:** This method has an abnormally high number of floating-point errors, so methods such as ``is_zero_approx`` will not work reliably.
+\ **Note:** The magnitude of the floating-point error for this method is abnormally high, so methods such as ``is_zero_approx`` will not work reliably.
 
 
 ----
 ----
 
 

文件差異過大導致無法顯示
+ 0 - 0
classes/class_refcounted.rst


文件差異過大導致無法顯示
+ 0 - 0
classes/class_resource.rst


+ 2 - 2
classes/class_resourcesaver.rst

@@ -67,9 +67,9 @@ flags **SaverFlags**:
 
 
 - **FLAG_OMIT_EDITOR_PROPERTIES** = **8** --- Do not save editor-specific metadata (identified by their ``__editor`` prefix).
 - **FLAG_OMIT_EDITOR_PROPERTIES** = **8** --- Do not save editor-specific metadata (identified by their ``__editor`` prefix).
 
 
-- **FLAG_SAVE_BIG_ENDIAN** = **16** --- Save as big endian (see :ref:`File.big_endian<class_File_property_big_endian>`).
+- **FLAG_SAVE_BIG_ENDIAN** = **16** --- Save as big endian (see :ref:`FileAccess.big_endian<class_FileAccess_property_big_endian>`).
 
 
-- **FLAG_COMPRESS** = **32** --- Compress the resource on save using :ref:`File.COMPRESSION_ZSTD<class_File_constant_COMPRESSION_ZSTD>`. Only available for binary resource types.
+- **FLAG_COMPRESS** = **32** --- Compress the resource on save using :ref:`FileAccess.COMPRESSION_ZSTD<class_FileAccess_constant_COMPRESSION_ZSTD>`. Only available for binary resource types.
 
 
 - **FLAG_REPLACE_SUBRESOURCE_PATHS** = **64** --- Take over the paths of the saved subresources (see :ref:`Resource.take_over_path<class_Resource_method_take_over_path>`).
 - **FLAG_REPLACE_SUBRESOURCE_PATHS** = **64** --- Take over the paths of the saved subresources (see :ref:`Resource.take_over_path<class_Resource_method_take_over_path>`).
 
 

+ 14 - 6
classes/class_scripteditorbase.rst

@@ -35,7 +35,7 @@ Signals
 
 
 - **edited_script_changed** **(** **)**
 - **edited_script_changed** **(** **)**
 
 
-Emitted after script validation. For visual scripts on modification.
+Emitted after script validation.
 
 
 ----
 ----
 
 
@@ -47,11 +47,19 @@ Emitted when the user requests a specific documentation page.
 
 
 ----
 ----
 
 
+.. _class_ScriptEditorBase_signal_go_to_method:
+
+- **go_to_method** **(** :ref:`Object<class_Object>` script, :ref:`String<class_String>` method **)**
+
+Emitted when the user requests to view a specific method of a script, similar to :ref:`request_open_script_at_line<class_ScriptEditorBase_signal_request_open_script_at_line>`.
+
+----
+
 .. _class_ScriptEditorBase_signal_name_changed:
 .. _class_ScriptEditorBase_signal_name_changed:
 
 
 - **name_changed** **(** **)**
 - **name_changed** **(** **)**
 
 
-Emitted after script validation or when the edited resource has changed. Not used by visual scripts.
+Emitted after script validation or when the edited resource has changed.
 
 
 ----
 ----
 
 
@@ -59,7 +67,7 @@ Emitted after script validation or when the edited resource has changed. Not use
 
 
 - **replace_in_files_requested** **(** :ref:`String<class_String>` text **)**
 - **replace_in_files_requested** **(** :ref:`String<class_String>` text **)**
 
 
-Emitted when the user request to find and replace text in the file system. Not used by visual scripts.
+Emitted when the user request to find and replace text in the file system.
 
 
 ----
 ----
 
 
@@ -75,7 +83,7 @@ Emitted when the user requests contextual help.
 
 
 - **request_open_script_at_line** **(** :ref:`Object<class_Object>` script, :ref:`int<class_int>` line **)**
 - **request_open_script_at_line** **(** :ref:`Object<class_Object>` script, :ref:`int<class_int>` line **)**
 
 
-Emitted when the user requests a script.
+Emitted when the user requests to view a specific line of a script, similar to :ref:`go_to_method<class_ScriptEditorBase_signal_go_to_method>`.
 
 
 ----
 ----
 
 
@@ -91,7 +99,7 @@ Emitted when the user contextual goto and the item is in the same script.
 
 
 - **search_in_files_requested** **(** :ref:`String<class_String>` text **)**
 - **search_in_files_requested** **(** :ref:`String<class_String>` text **)**
 
 
-Emitted when the user request to search text in the file system. Not used by visual scripts.
+Emitted when the user request to search text in the file system.
 
 
 Method Descriptions
 Method Descriptions
 -------------------
 -------------------
@@ -108,7 +116,7 @@ Adds a :ref:`EditorSyntaxHighlighter<class_EditorSyntaxHighlighter>` to the open
 
 
 - :ref:`Control<class_Control>` **get_base_editor** **(** **)** |const|
 - :ref:`Control<class_Control>` **get_base_editor** **(** **)** |const|
 
 
-Returns the underlying :ref:`Control<class_Control>` used for editing scripts. This can be either :ref:`CodeEdit<class_CodeEdit>` (for text scripts) or :ref:`GraphEdit<class_GraphEdit>` (for visual scripts).
+Returns the underlying :ref:`Control<class_Control>` used for editing scripts. For text scripts, this is a :ref:`CodeEdit<class_CodeEdit>`.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |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.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

部分文件因文件數量過多而無法顯示