diff --git a/classes/class_@gdscript.rst b/classes/class_@gdscript.rst index 0659bab6e..732cf5785 100644 --- a/classes/class_@gdscript.rst +++ b/classes/class_@gdscript.rst @@ -220,11 +220,15 @@ Constants - **PI** = **3.141593** --- Constant that represents how many times the diameter of a circle fits around its perimeter. This is equivalent to ``TAU / 2``. -- **TAU** = **6.283185** --- The circle constant, the circumference of the unit circle in radians. +- **TAU** = **6.283185** --- The circle constant, the circumference of the unit circle in radians. This is equivalent to ``PI * 2``, or 360 degrees in rotations. -- **INF** = **inf** --- Positive infinity. For negative infinity, use -INF. +- **INF** = **inf** --- Positive floating-point infinity. This is the result of floating-point division when the divisor is ``0.0``. For negative infinity, use ``-INF``. Dividing by ``-0.0`` will result in negative infinity if the numerator is positive, so dividing by ``0.0`` is not the same as dividing by ``-0.0`` (despite ``0.0 == -0.0`` returning ``true``). -- **NAN** = **nan** --- "Not a Number", an invalid value. ``NaN`` has special properties, including that it is not equal to itself. It is output by some invalid operations, such as dividing zero by zero. +**Note:** Numeric infinity is only a concept with floating-point numbers, and has no equivalent for integers. Dividing an integer number by ``0`` will not result in :ref:`INF` and will result in a run-time error instead. + +- **NAN** = **nan** --- "Not a Number", an invalid floating-point value. :ref:`NAN` has special properties, including that it is not equal to itself (``NAN == NAN`` returns ``false``). It is output by some invalid operations, such as dividing floating-point ``0.0`` by ``0.0``. + +**Note:** "Not a Number" is only a concept with floating-point numbers, and has no equivalent for integers. Dividing an integer ``0`` by ``0`` will not result in :ref:`NAN` and will result in a run-time error instead. Method Descriptions ------------------- diff --git a/classes/class_acceptdialog.rst b/classes/class_acceptdialog.rst index 2e235c9d4..7fbeb7fa3 100644 --- a/classes/class_acceptdialog.rst +++ b/classes/class_acceptdialog.rst @@ -47,6 +47,8 @@ Methods +-----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`register_text_enter` **(** :ref:`Node` line_edit **)** | +-----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`remove_button` **(** :ref:`Control` button **)** | ++-----------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Signals ------- @@ -127,6 +129,8 @@ Adds a button with label ``text`` and a custom ``action`` to the dialog and retu If ``true``, ``right`` will place the button to the right of any sibling buttons. +You can use :ref:`remove_button` method to remove a button created with this method from the dialog. + ---- .. _class_AcceptDialog_method_add_cancel: @@ -135,6 +139,8 @@ If ``true``, ``right`` will place the button to the right of any sibling buttons Adds a button with label ``name`` and a cancel action to the dialog and returns the created button. +You can use :ref:`remove_button` method to remove a button created with this method from the dialog. + ---- .. _class_AcceptDialog_method_get_label: @@ -159,6 +165,14 @@ Returns the OK :ref:`Button` instance. Registers a :ref:`LineEdit` in the dialog. When the enter key is pressed, the dialog will be accepted. +---- + +.. _class_AcceptDialog_method_remove_button: + +- void **remove_button** **(** :ref:`Control` button **)** + +Removes the ``button`` from the dialog. Does NOT free the ``button``. The ``button`` must be a :ref:`Button` added with :ref:`add_button` or :ref:`add_cancel` method. After removal, pressing the ``button`` will no longer emit this dialog's :ref:`custom_action` signal or cancel this dialog. + .. |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.)` diff --git a/classes/class_aescontext.rst b/classes/class_aescontext.rst new file mode 100644 index 000000000..84cf39a06 --- /dev/null +++ b/classes/class_aescontext.rst @@ -0,0 +1,132 @@ +:github_url: hide + +.. Generated automatically by doc/tools/makerst.py in Godot's source tree. +.. DO NOT EDIT THIS FILE, but the AESContext.xml source instead. +.. The source is found in doc/classes or modules//doc_classes. + +.. _class_AESContext: + +AESContext +========== + +**Inherits:** :ref:`Reference` **<** :ref:`Object` + +Interface to low level AES encryption features. + +Description +----------- + +This class provides access to AES encryption/decryption of raw data. Both AES-ECB and AES-CBC mode are supported. + +:: + + extends Node + + var aes = AESContext.new() + + func _ready(): + var key = "My secret key!!!" # Key must be either 16 or 32 bytes. + var data = "My secret text!!" # Data size must be multiple of 16 bytes, apply padding if needed. + # Encrypt ECB + aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8()) + var encrypted = aes.update(data.to_utf8()) + aes.finish() + # Decrypt ECB + aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8()) + var decrypted = aes.update(encrypted) + aes.finish() + # Check ECB + assert(decrypted == data.to_utf8()) + + var iv = "My secret iv!!!!" # IV must be of exactly 16 bytes. + # Encrypt CBC + aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8(), iv.to_utf8()) + encrypted = aes.update(data.to_utf8()) + aes.finish() + # Decrypt CBC + aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8(), iv.to_utf8()) + decrypted = aes.update(encrypted) + aes.finish() + # Check CBC + assert(decrypted == data.to_utf8()) + +Methods +------- + ++-------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`finish` **(** **)** | ++-------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| :ref:`PoolByteArray` | :ref:`get_iv_state` **(** **)** | ++-------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| :ref:`Error` | :ref:`start` **(** :ref:`Mode` mode, :ref:`PoolByteArray` key, :ref:`PoolByteArray` iv=PoolByteArray( ) **)** | ++-------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| :ref:`PoolByteArray` | :ref:`update` **(** :ref:`PoolByteArray` src **)** | ++-------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + +Enumerations +------------ + +.. _enum_AESContext_Mode: + +.. _class_AESContext_constant_MODE_ECB_ENCRYPT: + +.. _class_AESContext_constant_MODE_ECB_DECRYPT: + +.. _class_AESContext_constant_MODE_CBC_ENCRYPT: + +.. _class_AESContext_constant_MODE_CBC_DECRYPT: + +.. _class_AESContext_constant_MODE_MAX: + +enum **Mode**: + +- **MODE_ECB_ENCRYPT** = **0** --- AES electronic codebook encryption mode. + +- **MODE_ECB_DECRYPT** = **1** --- AES electronic codebook decryption mode. + +- **MODE_CBC_ENCRYPT** = **2** --- AES cipher blocker chaining encryption mode. + +- **MODE_CBC_DECRYPT** = **3** --- AES cipher blocker chaining decryption mode. + +- **MODE_MAX** = **4** --- Maximum value for the mode enum. + +Method Descriptions +------------------- + +.. _class_AESContext_method_finish: + +- void **finish** **(** **)** + +Close this AES context so it can be started again. See :ref:`start`. + +---- + +.. _class_AESContext_method_get_iv_state: + +- :ref:`PoolByteArray` **get_iv_state** **(** **)** + +Get the current IV state for this context (IV gets updated when calling :ref:`update`). You normally don't need this function. + +Note: This function only makes sense when the context is started with :ref:`MODE_CBC_ENCRYPT` or :ref:`MODE_CBC_DECRYPT`. + +---- + +.. _class_AESContext_method_start: + +- :ref:`Error` **start** **(** :ref:`Mode` mode, :ref:`PoolByteArray` key, :ref:`PoolByteArray` iv=PoolByteArray( ) **)** + +Start the AES context in the given ``mode``. A ``key`` of either 16 or 32 bytes must always be provided, while an ``iv`` (initialization vector) of exactly 16 bytes, is only needed when ``mode`` is either :ref:`MODE_CBC_ENCRYPT` or :ref:`MODE_CBC_DECRYPT`. + +---- + +.. _class_AESContext_method_update: + +- :ref:`PoolByteArray` **update** **(** :ref:`PoolByteArray` src **)** + +Run the desired operation for this AES context. Will return a :ref:`PoolByteArray` containing the result of encrypting (or decrypting) the given ``src``. See :ref:`start` for mode of operation. + +Note: The size of ``src`` must be a multiple of 16. Apply some padding if needed. + +.. |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.)` diff --git a/classes/class_animatedsprite3d.rst b/classes/class_animatedsprite3d.rst index 14f43c212..20f7f87ab 100644 --- a/classes/class_animatedsprite3d.rst +++ b/classes/class_animatedsprite3d.rst @@ -9,7 +9,7 @@ AnimatedSprite3D ================ -**Inherits:** :ref:`SpriteBase3D` **<** :ref:`GeometryInstance` **<** :ref:`VisualInstance` **<** :ref:`Spatial` **<** :ref:`Node` **<** :ref:`Object` +**Inherits:** :ref:`SpriteBase3D` **<** :ref:`GeometryInstance` **<** :ref:`VisualInstance` **<** :ref:`CullInstance` **<** :ref:`Spatial` **<** :ref:`Node` **<** :ref:`Object` 2D sprite node in 3D world, that can use multiple 2D textures for animation. diff --git a/classes/class_animation.rst b/classes/class_animation.rst index d444f1bb5..42b03f2a7 100644 --- a/classes/class_animation.rst +++ b/classes/class_animation.rst @@ -723,7 +723,7 @@ Sets the value of an existing key. - void **track_set_path** **(** :ref:`int` track_idx, :ref:`NodePath` path **)** -Sets the path of a track. Paths must be valid scene-tree paths to a node, and must be specified starting from the parent node of the node that will reproduce the animation. Tracks that control properties or bones must append their name after the path, separated by ``":"``. +Sets the path of a track. Paths must be valid scene-tree paths to a node and must be specified starting from the parent node of the node that will reproduce the animation. Tracks that control properties or bones must append their name after the path, separated by ``":"``. For example, ``"character/skeleton:ankle"`` or ``"character/mesh:transform/local"``. diff --git a/classes/class_animationplayer.rst b/classes/class_animationplayer.rst index 3711d4e78..5713ab7b4 100644 --- a/classes/class_animationplayer.rst +++ b/classes/class_animationplayer.rst @@ -55,6 +55,8 @@ Properties +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+--------------------+ | :ref:`float` | :ref:`playback_speed` | ``1.0`` | +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+--------------------+ +| :ref:`bool` | :ref:`reset_on_save` | ``true`` | ++------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+--------------------+ | :ref:`NodePath` | :ref:`root_node` | ``NodePath("..")`` | +------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+--------------------+ @@ -114,7 +116,9 @@ Signals - **animation_changed** **(** :ref:`String` old_name, :ref:`String` new_name **)** -If the currently being played animation changes, this signal will notify of such change. +Emitted when a queued animation plays after the previous animation was finished. See :ref:`queue`. + +**Note:** The signal is not emitted when the animation is changed via :ref:`play` or from :ref:`AnimationTree`. ---- @@ -326,6 +330,24 @@ The speed scaling ratio. For instance, if this value is 1, then the animation pl ---- +.. _class_AnimationPlayer_property_reset_on_save: + +- :ref:`bool` **reset_on_save** + ++-----------+----------------------------------+ +| *Default* | ``true`` | ++-----------+----------------------------------+ +| *Setter* | set_reset_on_save_enabled(value) | ++-----------+----------------------------------+ +| *Getter* | is_reset_on_save_enabled() | ++-----------+----------------------------------+ + +This is used by the editor. If set to ``true``, the scene will be saved with the effects of the reset animation applied (as if it had been seeked to time 0), then reverted after saving. + +In other words, the saved scene file will contain the "default pose", as defined by the reset animation, if any, with the editor keeping the values that the nodes had before saving. + +---- + .. _class_AnimationPlayer_property_root_node: - :ref:`NodePath` **root_node** diff --git a/classes/class_animationtree.rst b/classes/class_animationtree.rst index b4f25287c..d4a60ce66 100644 --- a/classes/class_animationtree.rst +++ b/classes/class_animationtree.rst @@ -135,7 +135,7 @@ The process mode of this ``AnimationTree``. See :ref:`AnimationProcessMode`, the transformation will be cancelled visually, and the animation will appear to stay in place. +If the track has type :ref:`Animation.TYPE_TRANSFORM`, the transformation will be cancelled visually, and the animation will appear to stay in place. See also :ref:`get_root_motion_transform` and :ref:`RootMotionView`. ---- @@ -166,7 +166,7 @@ Manually advance the animations by the specified time (in seconds). - :ref:`Transform` **get_root_motion_transform** **(** **)** |const| -Retrieve the motion of the :ref:`root_motion_track` as a :ref:`Transform` that can be used elsewhere. If :ref:`root_motion_track` is not a path to a track of type :ref:`Animation.TYPE_TRANSFORM`, returns an identity transformation. +Retrieve the motion of the :ref:`root_motion_track` as a :ref:`Transform` that can be used elsewhere. If :ref:`root_motion_track` is not a path to a track of type :ref:`Animation.TYPE_TRANSFORM`, returns an identity transformation. See also :ref:`root_motion_track` and :ref:`RootMotionView`. ---- diff --git a/classes/class_area.rst b/classes/class_area.rst index 2d60d934a..78cd9fba5 100644 --- a/classes/class_area.rst +++ b/classes/class_area.rst @@ -11,12 +11,12 @@ Area **Inherits:** :ref:`CollisionObject` **<** :ref:`Spatial` **<** :ref:`Node` **<** :ref:`Object` -General-purpose area node for detection and 3D physics influence. +3D area for detection and physics and audio influence. Description ----------- -3D area that detects :ref:`CollisionObject` nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping). +3D area that detects :ref:`CollisionObject` nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping) and route audio to custom audio buses. Tutorials --------- @@ -35,10 +35,6 @@ Properties +-----------------------------------------------+---------------------------------------------------------------------------+-------------------------+ | :ref:`bool` | :ref:`audio_bus_override` | ``false`` | +-----------------------------------------------+---------------------------------------------------------------------------+-------------------------+ -| :ref:`int` | :ref:`collision_layer` | ``1`` | -+-----------------------------------------------+---------------------------------------------------------------------------+-------------------------+ -| :ref:`int` | :ref:`collision_mask` | ``1`` | -+-----------------------------------------------+---------------------------------------------------------------------------+-------------------------+ | :ref:`float` | :ref:`gravity` | ``9.8`` | +-----------------------------------------------+---------------------------------------------------------------------------+-------------------------+ | :ref:`float` | :ref:`gravity_distance_scale` | ``0.0`` | @@ -69,23 +65,15 @@ Properties Methods ------- -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`get_collision_layer_bit` **(** :ref:`int` bit **)** |const| | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`get_collision_mask_bit` **(** :ref:`int` bit **)** |const| | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`Array` | :ref:`get_overlapping_areas` **(** **)** |const| | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`Array` | :ref:`get_overlapping_bodies` **(** **)** |const| | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`overlaps_area` **(** :ref:`Node` area **)** |const| | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`overlaps_body` **(** :ref:`Node` body **)** |const| | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| void | :ref:`set_collision_layer_bit` **(** :ref:`int` bit, :ref:`bool` value **)** | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ -| void | :ref:`set_collision_mask_bit` **(** :ref:`int` bit, :ref:`bool` value **)** | -+---------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ ++---------------------------+--------------------------------------------------------------------------------------------------------+ +| :ref:`Array` | :ref:`get_overlapping_areas` **(** **)** |const| | ++---------------------------+--------------------------------------------------------------------------------------------------------+ +| :ref:`Array` | :ref:`get_overlapping_bodies` **(** **)** |const| | ++---------------------------+--------------------------------------------------------------------------------------------------------+ +| :ref:`bool` | :ref:`overlaps_area` **(** :ref:`Node` area **)** |const| | ++---------------------------+--------------------------------------------------------------------------------------------------------+ +| :ref:`bool` | :ref:`overlaps_body` **(** :ref:`Node` body **)** |const| | ++---------------------------+--------------------------------------------------------------------------------------------------------+ Signals ------- @@ -112,7 +100,7 @@ Emitted when another Area exits this Area. Requires :ref:`monitoring` area_id, :ref:`Area` area, :ref:`int` area_shape, :ref:`int` local_shape **)** +- **area_shape_entered** **(** :ref:`RID` area_rid, :ref:`Area` area, :ref:`int` area_shape, :ref:`int` local_shape **)** Emitted when one of another Area's :ref:`Shape`\ s enters one of this Area's :ref:`Shape`\ s. Requires :ref:`monitoring` to be set to ``true``. @@ -128,7 +116,7 @@ Emitted when one of another Area's :ref:`Shape`\ s enters one of th .. _class_Area_signal_area_shape_exited: -- **area_shape_exited** **(** :ref:`int` area_id, :ref:`Area` area, :ref:`int` area_shape, :ref:`int` local_shape **)** +- **area_shape_exited** **(** :ref:`RID` area_rid, :ref:`Area` area, :ref:`int` area_shape, :ref:`int` local_shape **)** Emitted when one of another Area's :ref:`Shape`\ s enters one of this Area's :ref:`Shape`\ s. Requires :ref:`monitoring` to be set to ``true``. @@ -164,7 +152,7 @@ Emitted when a :ref:`PhysicsBody` or :ref:`GridMap` body_id, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** +- **body_shape_entered** **(** :ref:`RID` body_rid, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** Emitted when one of a :ref:`PhysicsBody` or :ref:`GridMap`'s :ref:`Shape`\ s enters one of this Area's :ref:`Shape`\ s. Requires :ref:`monitoring` to be set to ``true``. :ref:`GridMap`\ s are detected if the :ref:`MeshLibrary` has Collision :ref:`Shape`\ s. @@ -180,7 +168,7 @@ Emitted when one of a :ref:`PhysicsBody` or :ref:`GridMap` body_id, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** +- **body_shape_exited** **(** :ref:`RID` body_rid, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** Emitted when one of a :ref:`PhysicsBody` or :ref:`GridMap`'s :ref:`Shape`\ s enters one of this Area's :ref:`Shape`\ s. Requires :ref:`monitoring` to be set to ``true``. :ref:`GridMap`\ s are detected if the :ref:`MeshLibrary` has Collision :ref:`Shape`\ s. @@ -272,38 +260,6 @@ If ``true``, the area's audio bus overrides the default audio bus. ---- -.. _class_Area_property_collision_layer: - -- :ref:`int` **collision_layer** - -+-----------+----------------------------+ -| *Default* | ``1`` | -+-----------+----------------------------+ -| *Setter* | set_collision_layer(value) | -+-----------+----------------------------+ -| *Getter* | get_collision_layer() | -+-----------+----------------------------+ - -The area's physics layer(s). Collidable objects can exist in any of 32 different layers. A contact is detected if object A is in any of the layers that object B scans, or object B is in any layers that object A scans. See also :ref:`collision_mask`. See `Collision layers and masks `_ in the documentation for more information. - ----- - -.. _class_Area_property_collision_mask: - -- :ref:`int` **collision_mask** - -+-----------+---------------------------+ -| *Default* | ``1`` | -+-----------+---------------------------+ -| *Setter* | set_collision_mask(value) | -+-----------+---------------------------+ -| *Getter* | get_collision_mask() | -+-----------+---------------------------+ - -The physics layers this area scans to determine collision detection. See `Collision layers and masks `_ in the documentation for more information. - ----- - .. _class_Area_property_gravity: - :ref:`float` **gravity** @@ -515,22 +471,6 @@ Override mode for gravity and damping calculations within this area. See :ref:`S Method Descriptions ------------------- -.. _class_Area_method_get_collision_layer_bit: - -- :ref:`bool` **get_collision_layer_bit** **(** :ref:`int` bit **)** |const| - -Returns an individual bit on the layer mask. - ----- - -.. _class_Area_method_get_collision_mask_bit: - -- :ref:`bool` **get_collision_mask_bit** **(** :ref:`int` bit **)** |const| - -Returns an individual bit on the collision mask. - ----- - .. _class_Area_method_get_overlapping_areas: - :ref:`Array` **get_overlapping_areas** **(** **)** |const| @@ -567,22 +507,6 @@ If ``true``, the given physics body overlaps the Area. The ``body`` argument can either be a :ref:`PhysicsBody` or a :ref:`GridMap` instance (while GridMaps are not physics body themselves, they register their tiles with collision shapes as a virtual physics body). ----- - -.. _class_Area_method_set_collision_layer_bit: - -- void **set_collision_layer_bit** **(** :ref:`int` bit, :ref:`bool` value **)** - -Set/clear individual bits on the layer mask. This simplifies editing this ``Area``'s layers. - ----- - -.. _class_Area_method_set_collision_mask_bit: - -- void **set_collision_mask_bit** **(** :ref:`int` bit, :ref:`bool` value **)** - -Set/clear individual bits on the collision mask. This simplifies editing which ``Area`` layers this ``Area`` scans. - .. |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.)` diff --git a/classes/class_area2d.rst b/classes/class_area2d.rst index d5b9571e0..2a58b020a 100644 --- a/classes/class_area2d.rst +++ b/classes/class_area2d.rst @@ -11,12 +11,12 @@ Area2D **Inherits:** :ref:`CollisionObject2D` **<** :ref:`Node2D` **<** :ref:`CanvasItem` **<** :ref:`Node` **<** :ref:`Object` -2D area for detection and 2D physics influence. +2D area for detection and physics and audio influence. Description ----------- -2D area that detects :ref:`CollisionObject2D` nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping). +2D area that detects :ref:`CollisionObject2D` nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping) and route audio to a custom audio bus. Tutorials --------- @@ -39,10 +39,6 @@ Properties +-------------------------------------------------+-----------------------------------------------------------------------------+---------------------+ | :ref:`bool` | :ref:`audio_bus_override` | ``false`` | +-------------------------------------------------+-----------------------------------------------------------------------------+---------------------+ -| :ref:`int` | :ref:`collision_layer` | ``1`` | -+-------------------------------------------------+-----------------------------------------------------------------------------+---------------------+ -| :ref:`int` | :ref:`collision_mask` | ``1`` | -+-------------------------------------------------+-----------------------------------------------------------------------------+---------------------+ | :ref:`float` | :ref:`gravity` | ``98.0`` | +-------------------------------------------------+-----------------------------------------------------------------------------+---------------------+ | :ref:`float` | :ref:`gravity_distance_scale` | ``0.0`` | @@ -65,23 +61,15 @@ Properties Methods ------- -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`get_collision_layer_bit` **(** :ref:`int` bit **)** |const| | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`get_collision_mask_bit` **(** :ref:`int` bit **)** |const| | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`Array` | :ref:`get_overlapping_areas` **(** **)** |const| | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`Array` | :ref:`get_overlapping_bodies` **(** **)** |const| | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`overlaps_area` **(** :ref:`Node` area **)** |const| | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| :ref:`bool` | :ref:`overlaps_body` **(** :ref:`Node` body **)** |const| | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| void | :ref:`set_collision_layer_bit` **(** :ref:`int` bit, :ref:`bool` value **)** | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ -| void | :ref:`set_collision_mask_bit` **(** :ref:`int` bit, :ref:`bool` value **)** | -+---------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+ ++---------------------------+----------------------------------------------------------------------------------------------------------+ +| :ref:`Array` | :ref:`get_overlapping_areas` **(** **)** |const| | ++---------------------------+----------------------------------------------------------------------------------------------------------+ +| :ref:`Array` | :ref:`get_overlapping_bodies` **(** **)** |const| | ++---------------------------+----------------------------------------------------------------------------------------------------------+ +| :ref:`bool` | :ref:`overlaps_area` **(** :ref:`Node` area **)** |const| | ++---------------------------+----------------------------------------------------------------------------------------------------------+ +| :ref:`bool` | :ref:`overlaps_body` **(** :ref:`Node` body **)** |const| | ++---------------------------+----------------------------------------------------------------------------------------------------------+ Signals ------- @@ -108,7 +96,7 @@ Emitted when another Area2D exits this Area2D. Requires :ref:`monitoring` area_id, :ref:`Area2D` area, :ref:`int` area_shape, :ref:`int` local_shape **)** +- **area_shape_entered** **(** :ref:`RID` area_rid, :ref:`Area2D` area, :ref:`int` area_shape, :ref:`int` local_shape **)** Emitted when one of another Area2D's :ref:`Shape2D`\ s enters one of this Area2D's :ref:`Shape2D`\ s. Requires :ref:`monitoring` to be set to ``true``. @@ -124,7 +112,7 @@ Emitted when one of another Area2D's :ref:`Shape2D`\ s enters one .. _class_Area2D_signal_area_shape_exited: -- **area_shape_exited** **(** :ref:`int` area_id, :ref:`Area2D` area, :ref:`int` area_shape, :ref:`int` local_shape **)** +- **area_shape_exited** **(** :ref:`RID` area_rid, :ref:`Area2D` area, :ref:`int` area_shape, :ref:`int` local_shape **)** Emitted when one of another Area2D's :ref:`Shape2D`\ s exits one of this Area2D's :ref:`Shape2D`\ s. Requires :ref:`monitoring` to be set to ``true``. @@ -160,7 +148,7 @@ Emitted when a :ref:`PhysicsBody2D` or :ref:`TileMap` body_id, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** +- **body_shape_entered** **(** :ref:`RID` body_rid, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** Emitted when one of a :ref:`PhysicsBody2D` or :ref:`TileMap`'s :ref:`Shape2D`\ s enters one of this Area2D's :ref:`Shape2D`\ s. Requires :ref:`monitoring` to be set to ``true``. :ref:`TileMap`\ s are detected if the :ref:`TileSet` has Collision :ref:`Shape2D`\ s. @@ -176,7 +164,7 @@ Emitted when one of a :ref:`PhysicsBody2D` or :ref:`TileMap .. _class_Area2D_signal_body_shape_exited: -- **body_shape_exited** **(** :ref:`int` body_id, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** +- **body_shape_exited** **(** :ref:`RID` body_rid, :ref:`Node` body, :ref:`int` body_shape, :ref:`int` local_shape **)** Emitted when one of a :ref:`PhysicsBody2D` or :ref:`TileMap`'s :ref:`Shape2D`\ s exits one of this Area2D's :ref:`Shape2D`\ s. Requires :ref:`monitoring` to be set to ``true``. :ref:`TileMap`\ s are detected if the :ref:`TileSet` has Collision :ref:`Shape2D`\ s. @@ -268,38 +256,6 @@ If ``true``, the area's audio bus overrides the default audio bus. ---- -.. _class_Area2D_property_collision_layer: - -- :ref:`int` **collision_layer** - -+-----------+----------------------------+ -| *Default* | ``1`` | -+-----------+----------------------------+ -| *Setter* | set_collision_layer(value) | -+-----------+----------------------------+ -| *Getter* | get_collision_layer() | -+-----------+----------------------------+ - -The area's physics layer(s). Collidable objects can exist in any of 32 different layers. A contact is detected if object A is in any of the layers that object B scans, or object B is in any layers that object A scans. See also :ref:`collision_mask`. See `Collision layers and masks `_ in the documentation for more information. - ----- - -.. _class_Area2D_property_collision_mask: - -- :ref:`int` **collision_mask** - -+-----------+---------------------------+ -| *Default* | ``1`` | -+-----------+---------------------------+ -| *Setter* | set_collision_mask(value) | -+-----------+---------------------------+ -| *Getter* | get_collision_mask() | -+-----------+---------------------------+ - -The physics layers this area scans to determine collision detection. See `Collision layers and masks `_ in the documentation for more information. - ----- - .. _class_Area2D_property_gravity: - :ref:`float` **gravity** @@ -447,22 +403,6 @@ Override mode for gravity and damping calculations within this area. See :ref:`S Method Descriptions ------------------- -.. _class_Area2D_method_get_collision_layer_bit: - -- :ref:`bool` **get_collision_layer_bit** **(** :ref:`int` bit **)** |const| - -Returns an individual bit on the layer mask. Describes whether other areas will collide with this one on the given layer. - ----- - -.. _class_Area2D_method_get_collision_mask_bit: - -- :ref:`bool` **get_collision_mask_bit** **(** :ref:`int` bit **)** |const| - -Returns an individual bit on the collision mask. Describes whether this area will collide with others on the given layer. - ----- - .. _class_Area2D_method_get_overlapping_areas: - :ref:`Array` **get_overlapping_areas** **(** **)** |const| @@ -485,7 +425,7 @@ Returns a list of intersecting :ref:`PhysicsBody2D`\ s. For If ``true``, the given area overlaps the Area2D. -**Note:** The result of this test is not immediate after moving objects. For performance, list of overlaps is updated once per frame and before the physics step. Consider using signals instead. +**Note:** The result of this test is not immediate after moving objects. For performance, the list of overlaps is updated once per frame and before the physics step. Consider using signals instead. ---- @@ -497,23 +437,7 @@ If ``true``, the given physics body overlaps the Area2D. **Note:** The result of this test is not immediate after moving objects. For performance, list of overlaps is updated once per frame and before the physics step. Consider using signals instead. -The ``body`` argument can either be a :ref:`PhysicsBody2D` or a :ref:`TileMap` instance (while TileMaps are not physics body themselves, they register their tiles with collision shapes as a virtual physics body). - ----- - -.. _class_Area2D_method_set_collision_layer_bit: - -- void **set_collision_layer_bit** **(** :ref:`int` bit, :ref:`bool` value **)** - -Set/clear individual bits on the layer mask. This makes getting an area in/out of only one layer easier. - ----- - -.. _class_Area2D_method_set_collision_mask_bit: - -- void **set_collision_mask_bit** **(** :ref:`int` bit, :ref:`bool` value **)** - -Set/clear individual bits on the collision mask. This makes selecting the areas scanned easier. +The ``body`` argument can either be a :ref:`PhysicsBody2D` or a :ref:`TileMap` instance (while TileMaps are not physics bodies themselves, they register their tiles with collision shapes as a virtual physics body). .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_array.rst b/classes/class_array.rst index 8179277d9..517d1476e 100644 --- a/classes/class_array.rst +++ b/classes/class_array.rst @@ -9,12 +9,12 @@ Array ===== -Generic array datatype. +A generic array datatype. Description ----------- -Generic array which can contain several elements of any type, accessible by a numerical index starting at 0. Negative indices can be used to count from the back, like in Python (-1 is the last element, -2 the second to last, etc.). +A generic array that can contain several elements of any type, accessible by a numerical index starting at 0. Negative indices can be used to count from the back, like in Python (-1 is the last element, -2 is the second to last, etc.). **Example:** @@ -37,7 +37,7 @@ Arrays can be concatenated using the ``+`` operator: **Note:** Concatenating with the ``+=`` operator will create a new array, which has a cost. If you want to append another array to an existing array, :ref:`append_array` is more efficient. -**Note:** Arrays are always passed by reference. To get a copy of an array which can be modified independently of the original array, use :ref:`duplicate`. +**Note:** Arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use :ref:`duplicate`. **Note:** When declaring an array with ``const``, the array itself can still be mutated by defining the values at individual indices or pushing/removing elements. Using ``const`` will only prevent assigning the constant with another value after it was initialized. diff --git a/classes/class_arraymesh.rst b/classes/class_arraymesh.rst index 244c612d7..4953287c6 100644 --- a/classes/class_arraymesh.rst +++ b/classes/class_arraymesh.rst @@ -66,6 +66,8 @@ Methods +-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`clear_blend_shapes` **(** **)** | +-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`clear_surfaces` **(** **)** | ++-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_blend_shape_count` **(** **)** |const| | +-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`get_blend_shape_name` **(** :ref:`int` index **)** |const| | @@ -74,6 +76,8 @@ Methods +-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`regen_normalmaps` **(** **)** | +-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`set_blend_shape_name` **(** :ref:`int` index, :ref:`String` name **)** | ++-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`surface_find_by_name` **(** :ref:`String` name **)** |const| | +-----------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`surface_get_array_index_len` **(** :ref:`int` surf_idx **)** |const| | @@ -245,7 +249,7 @@ Adds name for a blend shape that will be added with :ref:`add_surface_from_array Creates a new surface. -Surfaces are created to be rendered using a ``primitive``, which may be any of the types defined in :ref:`PrimitiveType`. (As a note, when using indices, it is recommended to only use points, lines or triangles.) :ref:`Mesh.get_surface_count` will become the ``surf_idx`` for this new surface. +Surfaces are created to be rendered using a ``primitive``, which may be any of the types defined in :ref:`PrimitiveType`. (As a note, when using indices, it is recommended to only use points, lines, or triangles.) :ref:`Mesh.get_surface_count` will become the ``surf_idx`` for this new surface. The ``arrays`` argument is an array of arrays. See :ref:`ArrayType` for the values used in this array. For example, ``arrays[0]`` is the array of vertices. That first vertex sub-array is always required; the others are optional. Adding an index array puts this function into "index mode" where the vertex and other arrays become the sources of data and the index array defines the vertex order. All sub-arrays must have the same length as the vertex array or be empty, except for :ref:`ARRAY_INDEX` if it is used. @@ -259,6 +263,14 @@ Removes all blend shapes from this ``ArrayMesh``. ---- +.. _class_ArrayMesh_method_clear_surfaces: + +- void **clear_surfaces** **(** **)** + +Removes all surfaces from this ``ArrayMesh``. + +---- + .. _class_ArrayMesh_method_get_blend_shape_count: - :ref:`int` **get_blend_shape_count** **(** **)** |const| @@ -291,6 +303,12 @@ Will regenerate normal maps for the ``ArrayMesh``. ---- +.. _class_ArrayMesh_method_set_blend_shape_name: + +- void **set_blend_shape_name** **(** :ref:`int` index, :ref:`String` name **)** + +---- + .. _class_ArrayMesh_method_surface_find_by_name: - :ref:`int` **surface_find_by_name** **(** :ref:`String` name **)** |const| diff --git a/classes/class_arvrpositionaltracker.rst b/classes/class_arvrpositionaltracker.rst index cf3a1dc9b..b47b5dccc 100644 --- a/classes/class_arvrpositionaltracker.rst +++ b/classes/class_arvrpositionaltracker.rst @@ -9,7 +9,7 @@ ARVRPositionalTracker ===================== -**Inherits:** :ref:`Object` +**Inherits:** :ref:`Reference` **<** :ref:`Object` A tracked object. diff --git a/classes/class_arvrserver.rst b/classes/class_arvrserver.rst index 9b709b427..37c9e9e80 100644 --- a/classes/class_arvrserver.rst +++ b/classes/class_arvrserver.rst @@ -35,9 +35,15 @@ Properties Methods ------- ++-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`add_interface` **(** :ref:`ARVRInterface` interface **)** | ++-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`add_tracker` **(** :ref:`ARVRPositionalTracker` tracker **)** | +-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`center_on_hmd` **(** :ref:`RotationMode` rotation_mode, :ref:`bool` keep_height **)** | +-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`clear_primary_interface_if` **(** :ref:`ARVRInterface` interface **)** | ++-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`ARVRInterface` | :ref:`find_interface` **(** :ref:`String` name **)** |const| | +-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Transform` | :ref:`get_hmd_transform` **(** **)** | @@ -60,6 +66,10 @@ Methods +-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_tracker_count` **(** **)** |const| | +-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`remove_interface` **(** :ref:`ARVRInterface` interface **)** | ++-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| void | :ref:`remove_tracker` **(** :ref:`ARVRPositionalTracker` tracker **)** | ++-----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Signals ------- @@ -177,6 +187,22 @@ Allows you to adjust the scale to your game's units. Most AR/VR platforms assume Method Descriptions ------------------- +.. _class_ARVRServer_method_add_interface: + +- void **add_interface** **(** :ref:`ARVRInterface` interface **)** + +Registers an :ref:`ARVRInterface` object. + +---- + +.. _class_ARVRServer_method_add_tracker: + +- void **add_tracker** **(** :ref:`ARVRPositionalTracker` tracker **)** + +Registers a new :ref:`ARVRPositionalTracker` that tracks a spatial location in real space. + +---- + .. _class_ARVRServer_method_center_on_hmd: - void **center_on_hmd** **(** :ref:`RotationMode` rotation_mode, :ref:`bool` keep_height **)** @@ -195,6 +221,14 @@ You should call this method after a few seconds have passed. For instance, when ---- +.. _class_ARVRServer_method_clear_primary_interface_if: + +- void **clear_primary_interface_if** **(** :ref:`ARVRInterface` interface **)** + +Clears our current primary interface if it is set to the provided interface. + +---- + .. _class_ARVRServer_method_find_interface: - :ref:`ARVRInterface` **find_interface** **(** :ref:`String` name **)** |const| @@ -281,6 +315,22 @@ Returns the positional tracker at the given ID. Returns the number of trackers currently registered. +---- + +.. _class_ARVRServer_method_remove_interface: + +- void **remove_interface** **(** :ref:`ARVRInterface` interface **)** + +Removes this interface. + +---- + +.. _class_ARVRServer_method_remove_tracker: + +- void **remove_tracker** **(** :ref:`ARVRPositionalTracker` tracker **)** + +Removes this positional tracker. + .. |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.)` diff --git a/classes/class_astar.rst b/classes/class_astar.rst index 1faecf0d5..f315dc957 100644 --- a/classes/class_astar.rst +++ b/classes/class_astar.rst @@ -35,7 +35,7 @@ It is also possible to use non-Euclidean distances. To do so, create a class tha :ref:`_estimate_cost` should return a lower bound of the distance, i.e. ``_estimate_cost(u, v) <= _compute_cost(u, v)``. This serves as a hint to the algorithm because the custom ``_compute_cost`` might be computation-heavy. If this is not the case, make :ref:`_estimate_cost` return the same value as :ref:`_compute_cost` to provide the algorithm with the most accurate information. -If the default :ref:`_estimate_cost` and :ref:`_compute_cost` methods are used, or if the supplied :ref:`_estimate_cost` method returns a lower bound of the cost, then the paths returned by A\* will be the lowest cost paths. Here, the cost of a path equals to the sum of the :ref:`_compute_cost` results of all segments in the path multiplied by the ``weight_scale``\ s of the end points of the respective segments. If the default methods are used and the ``weight_scale``\ s of all points are set to ``1.0``, then this equals to the sum of Euclidean distances of all segments in the path. +If the default :ref:`_estimate_cost` and :ref:`_compute_cost` methods are used, or if the supplied :ref:`_estimate_cost` method returns a lower bound of the cost, then the paths returned by A\* will be the lowest-cost paths. Here, the cost of a path equals the sum of the :ref:`_compute_cost` results of all segments in the path multiplied by the ``weight_scale``\ s of the endpoints of the respective segments. If the default methods are used and the ``weight_scale``\ s of all points are set to ``1.0``, then this equals the sum of Euclidean distances of all segments in the path. Methods ------- diff --git a/classes/class_audioeffectpitchshift.rst b/classes/class_audioeffectpitchshift.rst index d5689e279..a127f0e75 100644 --- a/classes/class_audioeffectpitchshift.rst +++ b/classes/class_audioeffectpitchshift.rst @@ -50,15 +50,15 @@ Enumerations enum **FFT_Size**: -- **FFT_SIZE_256** = **0** +- **FFT_SIZE_256** = **0** --- Use a buffer of 256 samples for the Fast Fourier transform. Lowest latency, but least stable over time. -- **FFT_SIZE_512** = **1** +- **FFT_SIZE_512** = **1** --- Use a buffer of 512 samples for the Fast Fourier transform. Low latency, but less stable over time. -- **FFT_SIZE_1024** = **2** +- **FFT_SIZE_1024** = **2** --- Use a buffer of 1024 samples for the Fast Fourier transform. This is a compromise between latency and stability over time. -- **FFT_SIZE_2048** = **3** +- **FFT_SIZE_2048** = **3** --- Use a buffer of 2048 samples for the Fast Fourier transform. High latency, but stable over time. -- **FFT_SIZE_4096** = **4** +- **FFT_SIZE_4096** = **4** --- Use a buffer of 4096 samples for the Fast Fourier transform. Highest latency, but most stable over time. - **FFT_SIZE_MAX** = **5** --- Represents the size of the :ref:`FFT_Size` enum. @@ -77,6 +77,8 @@ Property Descriptions | *Getter* | get_fft_size() | +-----------+---------------------+ +The size of the `Fast Fourier transform `_ buffer. Higher values smooth out the effect over time, but have greater latency. The effects of this higher latency are especially noticeable on sounds that have sudden amplitude changes. + ---- .. _class_AudioEffectPitchShift_property_oversampling: @@ -91,6 +93,8 @@ Property Descriptions | *Getter* | get_oversampling() | +-----------+-------------------------+ +The oversampling factor to use. Higher values result in better quality, but are more demanding on the CPU and may cause audio cracking if the CPU can't keep up. + ---- .. _class_AudioEffectPitchShift_property_pitch_scale: @@ -105,7 +109,7 @@ Property Descriptions | *Getter* | get_pitch_scale() | +-----------+------------------------+ -Pitch value. Can range from 0 (-1 octave) to 16 (+16 octaves). +The pitch scale to use. ``1.0`` is the default pitch and plays sounds unaltered. :ref:`pitch_scale` can range from ``0.0`` (infinitely low pitch, inaudible) to ``16`` (16 times higher than the initial pitch). .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` diff --git a/classes/class_audioeffectspectrumanalyzer.rst b/classes/class_audioeffectspectrumanalyzer.rst index 37cb48c1c..a78f50a71 100644 --- a/classes/class_audioeffectspectrumanalyzer.rst +++ b/classes/class_audioeffectspectrumanalyzer.rst @@ -11,7 +11,21 @@ AudioEffectSpectrumAnalyzer **Inherits:** :ref:`AudioEffect` **<** :ref:`Resource` **<** :ref:`Reference` **<** :ref:`Object` +Audio effect that can be used for real-time audio visualizations. +Description +----------- + +This audio effect does not affect sound output, but can be used for real-time audio visualizations. + +See also :ref:`AudioStreamGenerator` for procedurally generating sounds. + +Tutorials +--------- + +- `Audio Spectrum Demo