From a3e4e9b0cc3e720f1fe91499319c65f12145b735 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Sat, 6 Jul 2024 08:41:08 -0500 Subject: [PATCH 01/99] Add commas before "but" throughout documentation --- about/faq.rst | 2 +- ...best_practices_for_engine_contributors.rst | 2 +- .../development/code_style_guidelines.rst | 8 +++---- .../introduction_to_the_buildsystem.rst | 4 ++-- .../core_and_modules/core_types.rst | 2 +- .../core_and_modules/object_class.rst | 6 ++--- .../documentation/building_the_manual.rst | 2 +- .../contributing_to_the_documentation.rst | 2 +- .../documentation/docs_image_guidelines.rst | 2 +- .../documentation/docs_writing_guidelines.rst | 2 +- .../workflow/pr_review_guidelines.rst | 14 ++++++------ .../first_3d_game/03.player_movement_code.rst | 2 +- tutorials/2d/2d_sprite_animation.rst | 2 +- tutorials/2d/2d_transforms.rst | 2 +- tutorials/2d/custom_drawing_in_2d.rst | 2 +- .../3d/environment_and_post_processing.rst | 2 +- tutorials/3d/lights_and_shadows.rst | 22 +++++++++---------- tutorials/3d/mesh_lod.rst | 6 ++--- tutorials/3d/using_decals.rst | 2 +- tutorials/3d/variable_rate_shading.rst | 10 ++++----- tutorials/3d/visibility_ranges.rst | 2 +- tutorials/3d/volumetric_fog.rst | 6 ++--- tutorials/troubleshooting.rst | 6 ++--- 23 files changed, 55 insertions(+), 55 deletions(-) diff --git a/about/faq.rst b/about/faq.rst index 33f627a1c5f..1c65a09fbf7 100644 --- a/about/faq.rst +++ b/about/faq.rst @@ -190,7 +190,7 @@ game with them, as either open- or closed-source. To see how support for your SDK of choice could still be provided, look at the Plugins question below. -If you know of a third-party SDK that is not supported by Godot but that offers +If you know of a third-party SDK that is not supported by Godot, but that offers free and open source integration, consider starting the integration work yourself. Godot is not owned by one person; it belongs to the community, and it grows along with ambitious community contributors like you. diff --git a/contributing/development/best_practices_for_engine_contributors.rst b/contributing/development/best_practices_for_engine_contributors.rst index 87fdf14a000..b0dd1de5608 100644 --- a/contributing/development/best_practices_for_engine_contributors.rst +++ b/contributing/development/best_practices_for_engine_contributors.rst @@ -167,7 +167,7 @@ who design software) to actually understand all future user needs. Trying to write very flexible structures that cater to many use cases at once is often a mistake. -We may come up with something we believe is brilliant but later find out that +We may come up with something we believe is brilliant, but later find out that users will never even use half of it or that they require features that don't quite fit into our original design, forcing us to either throw it away or make it even more complex. diff --git a/contributing/development/code_style_guidelines.rst b/contributing/development/code_style_guidelines.rst index 2b6e681a6c3..8ea15b0a03b 100644 --- a/contributing/development/code_style_guidelines.rst +++ b/contributing/development/code_style_guidelines.rst @@ -35,7 +35,7 @@ fine. If you plan to contribute regularly, however, we strongly advise that you set up clang-format locally to check and automatically fix all your commits. .. warning:: Godot's code style should *not* be applied to third-party code, - i.e. that is included in Godot's source tree but was not written + i.e. that is included in Godot's source tree, but was not written specifically for our project. Such code usually comes from different upstream projects with their own style guides (or lack thereof), and don't want to introduce differences that would make @@ -65,7 +65,7 @@ Pre-commit hook ^^^^^^^^^^^^^^^ For ease of use, we provide hooks for Git with the `pre-commit `__ -Python framework that will run clang-format automatically on all your commits with the +Python framework that will run clang-format automatically on all your commits with the correct version of clang-format. To set up: @@ -77,7 +77,7 @@ To set up: You can also run the hook manually with ``pre-commit run``. -.. note:: +.. note:: Previously, we supplied a hook in the folder ``misc/hooks``. If you copied the script manually, these hooks should still work, but symlinks will be broken. @@ -382,7 +382,7 @@ instead. // ... } -For member variables, don't use Javadoc-style comments but use single-line comments instead: +For member variables, don't use Javadoc-style comments, but use single-line comments instead: .. code-block:: cpp diff --git a/contributing/development/compiling/introduction_to_the_buildsystem.rst b/contributing/development/compiling/introduction_to_the_buildsystem.rst index e19ed0ba4c3..9a7af77618e 100644 --- a/contributing/development/compiling/introduction_to_the_buildsystem.rst +++ b/contributing/development/compiling/introduction_to_the_buildsystem.rst @@ -133,7 +133,7 @@ All builds are optimized. Each mode means: The editor is enabled by default in all PC targets (Linux, Windows, macOS), disabled for everything else. Disabling the editor produces a binary that can -run projects but does not include the editor or the Project Manager. +run projects, but does not include the editor or the Project Manager. :: @@ -403,7 +403,7 @@ To perform an SCU build, use the ``scu_build=yes`` SCons option. regular build prior to submitting the PR. This is because SCU builds by nature include headers from earlier ``.cpp`` files in the translation unit, therefore won't catch all the includes you will - need in a regular build. The CI will catch these errors but it will + need in a regular build. The CI will catch these errors, but it will usually be faster to catch them on a local build on your machine. Export templates diff --git a/contributing/development/core_and_modules/core_types.rst b/contributing/development/core_and_modules/core_types.rst index 59d9bf14115..64c5200a536 100644 --- a/contributing/development/core_and_modules/core_types.rst +++ b/contributing/development/core_and_modules/core_types.rst @@ -53,7 +53,7 @@ Segmentation slowly creates holes that are too small for most common allocations, so that memory is wasted. There is a lot of literature about heap and segmentation, so this topic will not be developed further here. Modern operating systems use paged memory, which helps -mitigate the problem of segmentation but doesn't solve it. +mitigate the problem of segmentation, but doesn't solve it. However, in many studies and tests, it is shown that given enough memory, if the maximum allocation size is below a given threshold in diff --git a/contributing/development/core_and_modules/object_class.rst b/contributing/development/core_and_modules/object_class.rst index e2afbdad761..93887cf5ab3 100644 --- a/contributing/development/core_and_modules/object_class.rst +++ b/contributing/development/core_and_modules/object_class.rst @@ -53,7 +53,7 @@ Classes are registered by calling: Registering it will allow the class to be instanced by scripts, code, or creating them again when deserializing. -Registering as virtual is the same but it can't be instanced. +Registering as virtual is the same, but it can't be instanced. .. code-block:: cpp @@ -63,7 +63,7 @@ Object-derived classes can override the static function ``static void _bind_methods()``. When one class is registered, this static function is called to register all the object methods, properties, constants, etc. It's only called once. If an Object derived -class is instanced but has not been registered, it will be registered as +class is instanced, but has not been registered, it will be registered as virtual automatically. Inside ``_bind_methods``, there are a couple of things that can be done. @@ -148,7 +148,7 @@ For example: This is an integer property named "amount". The hint is a range, and the range goes from 0 to 49 in steps of 1 (integers). It is only usable for the editor -(editing the value visually) but won't be serialized. +(editing the value visually), but won't be serialized. Another example: diff --git a/contributing/documentation/building_the_manual.rst b/contributing/documentation/building_the_manual.rst index 4ac1d5059b4..749cdb12b64 100644 --- a/contributing/documentation/building_the_manual.rst +++ b/contributing/documentation/building_the_manual.rst @@ -120,7 +120,7 @@ If you run into errors, you may try the following command: If you get a ``MemoryError`` or ``EOFError``, you can remove the ``classes/`` folder and run ``make`` again. -This will drop the class references from the final HTML documentation but will keep the +This will drop the class references from the final HTML documentation, but will keep the rest intact. .. important:: diff --git a/contributing/documentation/contributing_to_the_documentation.rst b/contributing/documentation/contributing_to_the_documentation.rst index 396276fa56d..a6abad0d295 100644 --- a/contributing/documentation/contributing_to_the_documentation.rst +++ b/contributing/documentation/contributing_to_the_documentation.rst @@ -89,7 +89,7 @@ and to log in to use it. Once logged in, you can propose change like so: 4. At the bottom of the web page, summarize the changes you made and click the button **Propose file change**. Make sure to replace the placeholder "Update file.rst" - by a short but clear one-line description, as this is the commit title. + by a short, but clear one-line description, as this is the commit title. 5. On the following screens, click the **Create pull request** button until you see a message like *Username wants to merge 1 commit into godotengine:master diff --git a/contributing/documentation/docs_image_guidelines.rst b/contributing/documentation/docs_image_guidelines.rst index 1e32ea765a9..3d087f39996 100644 --- a/contributing/documentation/docs_image_guidelines.rst +++ b/contributing/documentation/docs_image_guidelines.rst @@ -215,7 +215,7 @@ video resolution will vary depending on the source's aspect ratio. .. tip:: - If the video was recorded with an audio track but this audio track is not + If the video was recorded with an audio track, but this audio track is not necessary, consider stripping it by adding the ``-an`` option to the FFmpeg command line (before the output file name). This will reduce file size and also ensure audio controls don't show up on the video when played in a diff --git a/contributing/documentation/docs_writing_guidelines.rst b/contributing/documentation/docs_writing_guidelines.rst index 61eb9e53e7f..dac91891a7f 100644 --- a/contributing/documentation/docs_writing_guidelines.rst +++ b/contributing/documentation/docs_writing_guidelines.rst @@ -137,7 +137,7 @@ Write as few adjectives and adverbs as possible. Only use them if they add key information to the description. **Don't** use redundant or meaningless adverbs. Words that lengthen the -documentation but don't add any information: +documentation, but don't add any information: :: diff --git a/contributing/workflow/pr_review_guidelines.rst b/contributing/workflow/pr_review_guidelines.rst index b0cfc136949..66281dcc1a9 100644 --- a/contributing/workflow/pr_review_guidelines.rst +++ b/contributing/workflow/pr_review_guidelines.rst @@ -12,7 +12,7 @@ Pull request review process wanting to know how to ensure that their PR is merged. From a high level, the ideal life cycle of a pull request looks like the -following: +following: 1. A contributor opens a PR that fixes a specific problem (optimally closing a GitHub `issue `_ or implementing @@ -33,9 +33,9 @@ following: This document will explain steps 2, 3, 4, and 5 in more detail. For a more detailed explanation of the pull request workflow please see the :ref:`pull -request workflow document `. +request workflow document `. -.. note:: +.. note:: In practice these steps may blend together. Oftentimes maintainers will provide comments on code style and code quality at the same time and will approve a pull request for both. @@ -160,7 +160,7 @@ As you review pull requests, keep the Godot `Code of Conduct * Always assume positive intent from others. -* Feedback is always welcome but keep your criticism constructive. +* Feedback is always welcome, but keep your criticism constructive. Here are some things to avoid as you iterate on a pull request with a contributor: @@ -178,7 +178,7 @@ contributor: areas and in performance-sensitive areas than it is in editor code for example. -* **Expanding the scope of a pull request.** +* **Expanding the scope of a pull request.** Providing context or related/similar issues or proposals that may be fixed similarly can be helpful, but adding a "may as well fix that thing over there @@ -253,7 +253,7 @@ Merging pull requests In general, pull requests should only be merged by members of the production team or team leaders for pull requests in their area of the engine. For example, the networking team leader could merge a networking pull request that doesn't -substantially change non-networking sections of code. +substantially change non-networking sections of code. In practice it is best to wait for a member of the production team to merge the pull request as they keep a close eye on the entire codebase and will likely @@ -275,7 +275,7 @@ steps yourself. Production team members should ensure that the right people look at a pull request before it is merged. In some cases this may require multiple people to weigh in. In other cases, only one substantive approval is needed before the -code can be merged. +code can be merged. In general, try not to merge things based on one review alone, especially if it is your own. Get a second opinion from another maintainer, and make sure all the diff --git a/getting_started/first_3d_game/03.player_movement_code.rst b/getting_started/first_3d_game/03.player_movement_code.rst index 6f4a0d02451..df04db942fe 100644 --- a/getting_started/first_3d_game/03.player_movement_code.rst +++ b/getting_started/first_3d_game/03.player_movement_code.rst @@ -174,7 +174,7 @@ that looks in the ``direction`` direction. Then, we update the velocity. We have to calculate the ground velocity and the fall speed separately. Be sure to go back one tab so the lines are inside the -``_physics_process()`` function but outside the condition we just wrote above. +``_physics_process()`` function, but outside the condition we just wrote above. .. tabs:: .. code-tab:: gdscript GDScript diff --git a/tutorials/2d/2d_sprite_animation.rst b/tutorials/2d/2d_sprite_animation.rst index bce8da40dd3..912cbffbfec 100644 --- a/tutorials/2d/2d_sprite_animation.rst +++ b/tutorials/2d/2d_sprite_animation.rst @@ -271,7 +271,7 @@ released. it's important to keep in mind that ``play()`` isn't applied instantly. Instead, it's applied the next time the :ref:`AnimationPlayer ` is processed. This may end up being on the next frame, causing a 'glitch' frame, - where the property change was applied but the animation was not. + where the property change was applied, but the animation was not. If this turns out to be a problem, after calling ``play()``, you can call ``advance(0)`` to update the animation immediately. diff --git a/tutorials/2d/2d_transforms.rst b/tutorials/2d/2d_transforms.rst index 8403913f157..b8e8ccee8cd 100644 --- a/tutorials/2d/2d_transforms.rst +++ b/tutorials/2d/2d_transforms.rst @@ -45,7 +45,7 @@ resizing or stretching the screen. This transform is used internally (as described in :ref:`doc_multiple_resolutions`), but can also be manually set on each viewport. -Input events are multiplied by this transform but lack the ones above. To +Input events are multiplied by this transform, but lack the ones above. To convert InputEvent coordinates to local CanvasItem coordinates, the :ref:`CanvasItem.make_input_local() ` function was added for convenience. diff --git a/tutorials/2d/custom_drawing_in_2d.rst b/tutorials/2d/custom_drawing_in_2d.rst index c50fc0d8bec..e15843f9a67 100644 --- a/tutorials/2d/custom_drawing_in_2d.rst +++ b/tutorials/2d/custom_drawing_in_2d.rst @@ -246,7 +246,7 @@ Example 1: drawing a custom shape We will now use the custom drawing functionality of the Godot Engine to draw something that Godot doesn't provide functions for. We will recreate the Godot -logo but with code- only using drawing functions. +logo, but with code- only using drawing functions. You will have to code a function to perform this and draw it yourself. diff --git a/tutorials/3d/environment_and_post_processing.rst b/tutorials/3d/environment_and_post_processing.rst index ff84da5226f..cacc178e0b8 100644 --- a/tutorials/3d/environment_and_post_processing.rst +++ b/tutorials/3d/environment_and_post_processing.rst @@ -499,7 +499,7 @@ own, the effect may not be that noticeable, which is intended. Instead, :abbr:`SSIL (Screen-Space Indirect Lighting)` is meant to be used as a *complement* to other global illumination techniques such as VoxelGI, SDFGI and LightmapGI. :abbr:`SSIL (Screen-Space Indirect Lighting)` also provides -a subtle ambient occlusion effect, similar to SSAO but with less detail. +a subtle ambient occlusion effect, similar to SSAO, but with less detail. This feature only provides indirect lighting. It is not a full global illumination solution. This makes it different from screen-space global illumination (SSGI) diff --git a/tutorials/3d/lights_and_shadows.rst b/tutorials/3d/lights_and_shadows.rst index 6f3b31b2add..f2806896a0c 100644 --- a/tutorials/3d/lights_and_shadows.rst +++ b/tutorials/3d/lights_and_shadows.rst @@ -160,12 +160,12 @@ at the cost of decreased performance. all" settings. To achieve the best visuals, you may need to use different shadow bias values on a per-light basis. -**Note on Appearance Changes**: When enabling shadows on a light, be aware that the light's -appearance might change compared to when it's rendered without shadows in the compatibility -renderer. Due to limitations with older mobile devices, shadows are implemented using a multi-pass -rendering approach so lights with shadows are rendered in sRGB space instead of linear space. -This change in rendering space can sometimes drastically alter the light's appearance. To achieve a similar -appearance to an unshadowed light, you may need to adjust the light's energy setting. +**Note on Appearance Changes**: When enabling shadows on a light, be aware that the light's +appearance might change compared to when it's rendered without shadows in the compatibility +renderer. Due to limitations with older mobile devices, shadows are implemented using a multi-pass +rendering approach so lights with shadows are rendered in sRGB space instead of linear space. +This change in rendering space can sometimes drastically alter the light's appearance. To achieve a similar +appearance to an unshadowed light, you may need to adjust the light's energy setting. Directional light ----------------- @@ -208,10 +208,10 @@ receive low-resolution shadows that may appear blocky. To fix this, a technique named *Parallel Split Shadow Maps* (PSSM) is used. This splits the view frustum in 2 or 4 areas. Each area gets its own shadow map. This allows small areas close to the viewer to have the same shadow resolution -as a huge, far-away area. When shadows are enabled for DirectionalLight3D, the -default shadow mode is PSSM with 4 splits. In scenarios where an object is large -enough to appear in all four splits, it results in increased draw calls. Specifically, -such an object will be rendered five times in total: once for each of the four shadow +as a huge, far-away area. When shadows are enabled for DirectionalLight3D, the +default shadow mode is PSSM with 4 splits. In scenarios where an object is large +enough to appear in all four splits, it results in increased draw calls. Specifically, +such an object will be rendered five times in total: once for each of the four shadow splits and once for the final scene rendering. This can impact performance, understanding this behavior is important for optimizing your scene and managing performance expectations. @@ -535,7 +535,7 @@ not use mipmaps, which makes them faster to render. However, projectors will look grainy at distance. **Nearest/Linear Mipmaps** will look smoother at a distance, but projectors will look blurry when viewed from oblique angles. This can be resolved by using **Nearest/Linear Mipmaps Anisotropic**, which is the -highest-quality mode but also the most expensive. +highest-quality mode, but also the most expensive. If your project has a pixel art style, consider setting the filter to one of the **Nearest** values so that projectors use nearest-neighbor filtering. Otherwise, diff --git a/tutorials/3d/mesh_lod.rst b/tutorials/3d/mesh_lod.rst index d073dbffd3e..5f0e7623ed4 100644 --- a/tutorials/3d/mesh_lod.rst +++ b/tutorials/3d/mesh_lod.rst @@ -148,14 +148,14 @@ independently from other viewports. The default mesh LOD threshold of 1 pixel is tuned to look *perceptually* lossless; it provides a significant performance gain with an unnoticeable loss in quality. Higher values will make LOD transitions happen sooner when the -camera moves away, resulting in higher performance but lower quality. +camera moves away, resulting in higher performance, but lower quality. If you need to perform per-object adjustments to mesh LOD, you can adjust how aggressive LOD transitions should be by adjusting the **LOD Bias** property on any node that inherits from GeometryInstance3D. Values *above* ``1.0`` will make -LOD transitions happen later than usual (resulting in higher quality but lower +LOD transitions happen later than usual (resulting in higher quality, but lower performance). Values *below* ``1.0`` will make LOD transitions happen sooner than -usual (resulting in lower quality but higher performance). +usual (resulting in lower quality, but higher performance). Additionally, ReflectionProbe nodes have their own **Mesh LOD Threshold** property that can be adjusted to improve rendering performance when the reflection probe diff --git a/tutorials/3d/using_decals.rst b/tutorials/3d/using_decals.rst index 9998865d5a5..8c42d525b45 100644 --- a/tutorials/3d/using_decals.rst +++ b/tutorials/3d/using_decals.rst @@ -240,7 +240,7 @@ textures should be filtered. **Nearest/Linear** does not use mipmaps. However, decals will look grainy at a distance. **Nearest/Linear Mipmaps** will look smoother at a distance, but decals will look blurry when viewed from oblique angles. This can be resolved by using **Nearest/Linear Mipmaps Anisotropic**, -which provides the highest quality but is also slower to render. +which provides the highest quality, but is also slower to render. If your project has a pixel art style, consider setting the filter to one of the **Nearest** values so that decals use nearest-neighbor filtering. Otherwise, diff --git a/tutorials/3d/variable_rate_shading.rst b/tutorials/3d/variable_rate_shading.rst index 82f20fae7cd..81b902c25cf 100644 --- a/tutorials/3d/variable_rate_shading.rst +++ b/tutorials/3d/variable_rate_shading.rst @@ -37,12 +37,12 @@ density map linked at the bottom of this page: .. figure:: img/variable_rate_shading_textured_enabled.webp :align: center - :alt: Variable rate shading enabled in textured scene (lower quality but higher performance) + :alt: Variable rate shading enabled in textured scene (lower quality, but higher performance) - Variable rate shading enabled in textured scene (lower quality but higher performance) + Variable rate shading enabled in textured scene (lower quality, but higher performance) When used in scenes with low-frequency detail (such as scenes with a -stylized/low-poly aesthetic), it's possible to achieve similar performance gains +stylized/low-poly aesthetic), it's possible to achieve similar performance gains, but with less reduction in visual quality: .. figure:: img/variable_rate_shading_untextured_disabled.webp @@ -53,9 +53,9 @@ but with less reduction in visual quality: .. figure:: img/variable_rate_shading_untextured_enabled.webp :align: center - :alt: Variable rate shading enabled in untextured scene (lower quality but higher performance) + :alt: Variable rate shading enabled in untextured scene (lower quality, but higher performance) - Variable rate shading enabled in untextured scene (lower quality but higher performance) + Variable rate shading enabled in untextured scene (lower quality, but higher performance) Hardware support ---------------- diff --git a/tutorials/3d/visibility_ranges.rst b/tutorials/3d/visibility_ranges.rst index 02cba970372..0c882bd1adf 100644 --- a/tutorials/3d/visibility_ranges.rst +++ b/tutorials/3d/visibility_ranges.rst @@ -15,7 +15,7 @@ On this page, you'll learn: .. seealso:: - If you only need meshes to become less detailed over distance but don't have + If you only need meshes to become less detailed over distance, but don't have manually authored LOD meshes, consider relying on automatic :ref:`doc_mesh_lod` instead. diff --git a/tutorials/3d/volumetric_fog.rst b/tutorials/3d/volumetric_fog.rst index f5fca792360..e32acee8344 100644 --- a/tutorials/3d/volumetric_fog.rst +++ b/tutorials/3d/volumetric_fog.rst @@ -142,11 +142,11 @@ and quality: for better performance. - **Rendering > Environment > Volumetric Fog > Volume Depth:** Number of slices to use along the depth of the froxel buffer for volumetric fog. A lower number - will be more efficient but may result in artifacts appearing during camera + will be more efficient, but may result in artifacts appearing during camera movement. - **Rendering > Environment > Volumetric Fog > Use Filter:** Enables filtering of the volumetric fog effect prior to integration. This substantially blurs - the fog which reduces fine details but also smooths out harsh edges and + the fog which reduces fine details, but also smooths out harsh edges and aliasing artifacts. Disable when more detail is required. .. note:: @@ -159,7 +159,7 @@ Using fog volumes for local volumetric fog ------------------------------------------ Sometimes, you want fog to be constrained to specific areas. Conversely, you may -want to have global volumetric fog but fog should be excluded from certain +want to have global volumetric fog, but fog should be excluded from certain areas. Both approaches can be followed using FogVolume nodes. Here's a quick start guide to using FogVolumes: diff --git a/tutorials/troubleshooting.rst b/tutorials/troubleshooting.rst index 80419494635..23faaab8808 100644 --- a/tutorials/troubleshooting.rst +++ b/tutorials/troubleshooting.rst @@ -25,11 +25,11 @@ There are several ways to improve performance and battery life: which can be up to 4 times faster. - Open the Editor Settings and increase the value of **Low Processor Mode Sleep (µsec)** to ``33000`` (30 FPS). This value determines the amount of *microseconds* - between frames to render. Higher values will make the editor feel less reactive + between frames to render. Higher values will make the editor feel less reactive, but will help decrease CPU and GPU usage significantly. - If you have a node that causes the editor to redraw continuously (such as particles), hide it and show it using a script in the ``_ready()`` method. - This way, it will be hidden in the editor but will still be visible in the + This way, it will be hidden in the editor, but will still be visible in the running project. The editor stutters and flickers on my variable refresh rate monitor (G-Sync/FreeSync) @@ -49,7 +49,7 @@ There are several workarounds for this: alleviate this, you can increase **Low Processor Mode Sleep (µsec)** to ``33000`` (30 FPS) in the Editor Settings. This value determines the amount of *microseconds* between frames to render. Higher values will make the editor - feel less reactive but will help decrease CPU and GPU usage significantly. + feel less reactive, but will help decrease CPU and GPU usage significantly. - Alternatively, disable variable refresh rate on your monitor or in the graphics driver. - VRR flicker can be reduced on some displays using the **VRR Control** or **Fine Tune Dark Areas** options in your monitor's OSD. These options may From 9d2a54f64a3204804bec25bf1476fe53c20a4681 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:55:04 -0500 Subject: [PATCH 02/99] Update about/faq.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- about/faq.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/about/faq.rst b/about/faq.rst index 1c65a09fbf7..33f627a1c5f 100644 --- a/about/faq.rst +++ b/about/faq.rst @@ -190,7 +190,7 @@ game with them, as either open- or closed-source. To see how support for your SDK of choice could still be provided, look at the Plugins question below. -If you know of a third-party SDK that is not supported by Godot, but that offers +If you know of a third-party SDK that is not supported by Godot but that offers free and open source integration, consider starting the integration work yourself. Godot is not owned by one person; it belongs to the community, and it grows along with ambitious community contributors like you. From c94407f642be9d15fc19f5320465565aa686fabb Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:55:12 -0500 Subject: [PATCH 03/99] Update tutorials/2d/custom_drawing_in_2d.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- tutorials/2d/custom_drawing_in_2d.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/2d/custom_drawing_in_2d.rst b/tutorials/2d/custom_drawing_in_2d.rst index e15843f9a67..c50fc0d8bec 100644 --- a/tutorials/2d/custom_drawing_in_2d.rst +++ b/tutorials/2d/custom_drawing_in_2d.rst @@ -246,7 +246,7 @@ Example 1: drawing a custom shape We will now use the custom drawing functionality of the Godot Engine to draw something that Godot doesn't provide functions for. We will recreate the Godot -logo, but with code- only using drawing functions. +logo but with code- only using drawing functions. You will have to code a function to perform this and draw it yourself. From 525df8f404d91dd47def907ae0d29779306b25e7 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:55:25 -0500 Subject: [PATCH 04/99] Update getting_started/first_3d_game/03.player_movement_code.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- getting_started/first_3d_game/03.player_movement_code.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_started/first_3d_game/03.player_movement_code.rst b/getting_started/first_3d_game/03.player_movement_code.rst index df04db942fe..6f4a0d02451 100644 --- a/getting_started/first_3d_game/03.player_movement_code.rst +++ b/getting_started/first_3d_game/03.player_movement_code.rst @@ -174,7 +174,7 @@ that looks in the ``direction`` direction. Then, we update the velocity. We have to calculate the ground velocity and the fall speed separately. Be sure to go back one tab so the lines are inside the -``_physics_process()`` function, but outside the condition we just wrote above. +``_physics_process()`` function but outside the condition we just wrote above. .. tabs:: .. code-tab:: gdscript GDScript From 4e8142a35fc71022b3bbbb19fdb45e7bd9d25867 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:55:30 -0500 Subject: [PATCH 05/99] Update contributing/documentation/docs_writing_guidelines.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- contributing/documentation/docs_writing_guidelines.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/documentation/docs_writing_guidelines.rst b/contributing/documentation/docs_writing_guidelines.rst index dac91891a7f..61eb9e53e7f 100644 --- a/contributing/documentation/docs_writing_guidelines.rst +++ b/contributing/documentation/docs_writing_guidelines.rst @@ -137,7 +137,7 @@ Write as few adjectives and adverbs as possible. Only use them if they add key information to the description. **Don't** use redundant or meaningless adverbs. Words that lengthen the -documentation, but don't add any information: +documentation but don't add any information: :: From bb17829d9b2a73bcc850e3c7eb426305213ea5a3 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:58:43 -0500 Subject: [PATCH 06/99] Update contributing/documentation/docs_image_guidelines.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- contributing/documentation/docs_image_guidelines.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/documentation/docs_image_guidelines.rst b/contributing/documentation/docs_image_guidelines.rst index 3d087f39996..1e32ea765a9 100644 --- a/contributing/documentation/docs_image_guidelines.rst +++ b/contributing/documentation/docs_image_guidelines.rst @@ -215,7 +215,7 @@ video resolution will vary depending on the source's aspect ratio. .. tip:: - If the video was recorded with an audio track, but this audio track is not + If the video was recorded with an audio track but this audio track is not necessary, consider stripping it by adding the ``-an`` option to the FFmpeg command line (before the output file name). This will reduce file size and also ensure audio controls don't show up on the video when played in a From 0c10476a1dcbe6f5d2832122e6db23ee896d7521 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:58:57 -0500 Subject: [PATCH 07/99] Update contributing/development/core_and_modules/object_class.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- contributing/development/core_and_modules/object_class.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/development/core_and_modules/object_class.rst b/contributing/development/core_and_modules/object_class.rst index 93887cf5ab3..e6bf22ee31c 100644 --- a/contributing/development/core_and_modules/object_class.rst +++ b/contributing/development/core_and_modules/object_class.rst @@ -53,7 +53,7 @@ Classes are registered by calling: Registering it will allow the class to be instanced by scripts, code, or creating them again when deserializing. -Registering as virtual is the same, but it can't be instanced. +Registering as virtual is the same but it can't be instanced. .. code-block:: cpp From 5908691ea09d2c034473c9f2d8015b50dba82d61 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Tue, 9 Jul 2024 13:59:04 -0500 Subject: [PATCH 08/99] Update contributing/development/compiling/introduction_to_the_buildsystem.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- .../development/compiling/introduction_to_the_buildsystem.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/development/compiling/introduction_to_the_buildsystem.rst b/contributing/development/compiling/introduction_to_the_buildsystem.rst index 9a7af77618e..e7ff838c749 100644 --- a/contributing/development/compiling/introduction_to_the_buildsystem.rst +++ b/contributing/development/compiling/introduction_to_the_buildsystem.rst @@ -133,7 +133,7 @@ All builds are optimized. Each mode means: The editor is enabled by default in all PC targets (Linux, Windows, macOS), disabled for everything else. Disabling the editor produces a binary that can -run projects, but does not include the editor or the Project Manager. +run projects but does not include the editor or the Project Manager. :: From a71c5cd1dbcb8c4767f280bb90af28bfbd3b717e Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Sat, 27 Jul 2024 08:20:18 -0500 Subject: [PATCH 09/99] Update contributing/development/core_and_modules/core_types.rst --- contributing/development/core_and_modules/core_types.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/development/core_and_modules/core_types.rst b/contributing/development/core_and_modules/core_types.rst index 64c5200a536..59d9bf14115 100644 --- a/contributing/development/core_and_modules/core_types.rst +++ b/contributing/development/core_and_modules/core_types.rst @@ -53,7 +53,7 @@ Segmentation slowly creates holes that are too small for most common allocations, so that memory is wasted. There is a lot of literature about heap and segmentation, so this topic will not be developed further here. Modern operating systems use paged memory, which helps -mitigate the problem of segmentation, but doesn't solve it. +mitigate the problem of segmentation but doesn't solve it. However, in many studies and tests, it is shown that given enough memory, if the maximum allocation size is below a given threshold in From 7011117ccd7045ea722c49a84e477f9e0eade829 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Sat, 27 Jul 2024 08:20:44 -0500 Subject: [PATCH 10/99] Update contributing/development/core_and_modules/object_class.rst --- contributing/development/core_and_modules/object_class.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/development/core_and_modules/object_class.rst b/contributing/development/core_and_modules/object_class.rst index e6bf22ee31c..f297321c3be 100644 --- a/contributing/development/core_and_modules/object_class.rst +++ b/contributing/development/core_and_modules/object_class.rst @@ -148,7 +148,7 @@ For example: This is an integer property named "amount". The hint is a range, and the range goes from 0 to 49 in steps of 1 (integers). It is only usable for the editor -(editing the value visually), but won't be serialized. +(editing the value visually) but won't be serialized. Another example: From 97f2823ee1b67bc52c346c4a9af9f9c624f45fe0 Mon Sep 17 00:00:00 2001 From: Russell Sanborn Date: Sat, 27 Jul 2024 08:31:03 -0500 Subject: [PATCH 11/99] Remove "," in object_class.rst, add "code" to code_style_guidelines.rst --- contributing/development/code_style_guidelines.rst | 2 +- contributing/development/core_and_modules/object_class.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contributing/development/code_style_guidelines.rst b/contributing/development/code_style_guidelines.rst index 8ea15b0a03b..0d4fbd5defe 100644 --- a/contributing/development/code_style_guidelines.rst +++ b/contributing/development/code_style_guidelines.rst @@ -35,7 +35,7 @@ fine. If you plan to contribute regularly, however, we strongly advise that you set up clang-format locally to check and automatically fix all your commits. .. warning:: Godot's code style should *not* be applied to third-party code, - i.e. that is included in Godot's source tree, but was not written + i.e. code that is included in Godot's source tree, but was not written specifically for our project. Such code usually comes from different upstream projects with their own style guides (or lack thereof), and don't want to introduce differences that would make diff --git a/contributing/development/core_and_modules/object_class.rst b/contributing/development/core_and_modules/object_class.rst index f297321c3be..e2afbdad761 100644 --- a/contributing/development/core_and_modules/object_class.rst +++ b/contributing/development/core_and_modules/object_class.rst @@ -63,7 +63,7 @@ Object-derived classes can override the static function ``static void _bind_methods()``. When one class is registered, this static function is called to register all the object methods, properties, constants, etc. It's only called once. If an Object derived -class is instanced, but has not been registered, it will be registered as +class is instanced but has not been registered, it will be registered as virtual automatically. Inside ``_bind_methods``, there are a couple of things that can be done. From f10b322c27d7bb25190c135feb587ee21a2c3232 Mon Sep 17 00:00:00 2001 From: Sai Nane Date: Tue, 6 Aug 2024 14:39:41 +0000 Subject: [PATCH 12/99] Fix description of typed resource exports `AnimationNode`'s inherited classes are `Resource`, `RefCounted`, and `Object`. I assume it meant to say "derived classes", or something along the lines of "and all classes which inherit it". --- tutorials/scripting/c_sharp/c_sharp_exports.rst | 2 +- tutorials/scripting/gdscript/gdscript_exports.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/scripting/c_sharp/c_sharp_exports.rst b/tutorials/scripting/c_sharp/c_sharp_exports.rst index a0af83a3e33..4fcf8b0c037 100644 --- a/tutorials/scripting/c_sharp/c_sharp_exports.rst +++ b/tutorials/scripting/c_sharp/c_sharp_exports.rst @@ -342,7 +342,7 @@ Therefore, if you specify a type derived from Resource such as: public AnimationNode AnimationNode { get; set; } The drop-down menu will be limited to AnimationNode and all -its inherited classes. Custom resource classes can also be used, +its derived classes. Custom resource classes can also be used, see :ref:`doc_c_sharp_global_classes`. It must be noted that even if the script is not being run while in the diff --git a/tutorials/scripting/gdscript/gdscript_exports.rst b/tutorials/scripting/gdscript/gdscript_exports.rst index e8577aab82d..4e7430703ab 100644 --- a/tutorials/scripting/gdscript/gdscript_exports.rst +++ b/tutorials/scripting/gdscript/gdscript_exports.rst @@ -242,7 +242,7 @@ Therefore, if you specify an extension of Resource such as: @export var resource: AnimationNode The drop-down menu will be limited to AnimationNode and all -its inherited classes. +its derived classes. It must be noted that even if the script is not being run while in the editor, the exported properties are still editable. This can be used From dd9448f7252bf47875e91d6e89493f1c316121d8 Mon Sep 17 00:00:00 2001 From: Max Hilbrunner Date: Thu, 15 Aug 2024 14:16:05 +0200 Subject: [PATCH 13/99] Bump version --- conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf.py b/conf.py index 49616ce43b2..2b4a71149c9 100644 --- a/conf.py +++ b/conf.py @@ -194,7 +194,7 @@ # Set this to `True` when in the `latest` branch to clearly indicate to the reader # that they are not reading the `stable` documentation. "godot_is_latest": True, - "godot_version": "4.3", + "godot_version": "4.4", # Enables a banner that displays the up-to-date status of each article. "godot_show_article_status": True, # Display user-contributed notes at the bottom of pages that don't have `:allow_comments: False` at the top. From 03f966ab738eda1a80a992ca9e4d72bcdc5bf298 Mon Sep 17 00:00:00 2001 From: Patrick Exner Date: Thu, 15 Aug 2024 19:11:25 +0200 Subject: [PATCH 14/99] Fix project structure diagram in gdextension docs system docs --- tutorials/scripting/gdextension/gdextension_docs_system.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tutorials/scripting/gdextension/gdextension_docs_system.rst b/tutorials/scripting/gdextension/gdextension_docs_system.rst index 0a5f09338ca..aa23fab44e8 100644 --- a/tutorials/scripting/gdextension/gdextension_docs_system.rst +++ b/tutorials/scripting/gdextension/gdextension_docs_system.rst @@ -18,6 +18,8 @@ XML files (one per class) to document the exposed constructors, properties, meth We are assuming you are using the project files explained in the :ref:`GDExtension C++ Example ` with the following structure: +.. code-block:: none + gdextension_cpp_example/ # GDExtension directory | +--demo/ # game example/demo to test the extension From 387d5f8145f8099e80d74887d52d169bbead7597 Mon Sep 17 00:00:00 2001 From: tetrapod00 <145553014+tetrapod00@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:46:51 -0700 Subject: [PATCH 15/99] Fix glTF capitalization in manual --- getting_started/first_3d_game/02.player_input.rst | 4 ++-- tutorials/platform/android/android_library.rst | 10 +++++----- tutorials/xr/openxr_hand_tracking.rst | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/getting_started/first_3d_game/02.player_input.rst b/getting_started/first_3d_game/02.player_input.rst index 282b722cab3..a9d49650ec7 100644 --- a/getting_started/first_3d_game/02.player_input.rst +++ b/getting_started/first_3d_game/02.player_input.rst @@ -51,10 +51,10 @@ You can rename it to ``Character``. .. note:: - The ``.glb`` files contain 3D scene data based on the open source GLTF 2.0 + The ``.glb`` files contain 3D scene data based on the open source glTF 2.0 specification. They're a modern and powerful alternative to a proprietary format like FBX, which Godot also supports. To produce these files, we designed the - model in `Blender 3D `__ and exported it to GLTF. + model in `Blender 3D `__ and exported it to glTF. As with all kinds of physics nodes, we need a collision shape for our character to collide with the environment. Select the ``Player`` node again and add a child node diff --git a/tutorials/platform/android/android_library.rst b/tutorials/platform/android/android_library.rst index a962e6fa481..634df4fc558 100644 --- a/tutorials/platform/android/android_library.rst +++ b/tutorials/platform/android/android_library.rst @@ -45,11 +45,11 @@ These APIs can also be used to provide bidirectional communication between the h Godot instance allowing for greater control over the desired experience. We showcase how this is done using a sample Android app that embeds the Godot Engine as an Android view, -and uses it to render 3D GLTF models. +and uses it to render 3D glTF models. The `GLTF Viewer `_ sample app uses an `Android RecyclerView component `_ to create -a list of GLTF items, populated from `Kenney's Food Kit pack `_. -When an item on the list is selected, the app's logic interacts with the embedded Godot Engine to render the selected GLTF item as a 3D model. +a list of glTF items, populated from `Kenney's Food Kit pack `_. +When an item on the list is selected, the app's logic interacts with the embedded Godot Engine to render the selected glTF item as a 3D model. .. image:: img/gltf_viewer_sample_app_screenshot.webp @@ -146,7 +146,7 @@ Below we break-down the steps used to create the GLTF Viewer app. - Add any additional logic that will be used by your application - - For the sample app, this includes adding the `ItemsSelectionFragment fragment `_ (and related classes), a fragment used to build and show the list of GLTF items + - For the sample app, this includes adding the `ItemsSelectionFragment fragment `_ (and related classes), a fragment used to build and show the list of glTF items - Open the ``AndroidManifest.xml`` file, and configure the orientation if needed using the `android:screenOrientation attribute `_ @@ -191,7 +191,7 @@ Below we break-down the steps used to create the GLTF Viewer app. - Update the Godot project script logic as needed - For the sample app, the `script logic `_ queries for the runtime ``GodotPlugin`` instance and uses it to register for signals fired by the app logic - - The app logic fires a signal every time an item is selected in the list. The signal contains the filepath of the GLTF model, which is used by the ``gdscript`` logic to render the model. + - The app logic fires a signal every time an item is selected in the list. The signal contains the filepath of the glTF model, which is used by the ``gdscript`` logic to render the model. .. code-block:: gdscript diff --git a/tutorials/xr/openxr_hand_tracking.rst b/tutorials/xr/openxr_hand_tracking.rst index 9f0da10f5db..5d91708ca97 100644 --- a/tutorials/xr/openxr_hand_tracking.rst +++ b/tutorials/xr/openxr_hand_tracking.rst @@ -127,7 +127,7 @@ For this Godot uses the hand bone structure as defined for the :ref:`Godot Human but optionally supporting an extra tip bone for each finger. The `OpenXR hand tracking demo `_ -contains example GLTF files of properly rigged hands. +contains example glTF files of properly rigged hands. We will be using those here and add them as a child to our ``XRNode3D`` node. We also need to enable editable children to gain access to our :ref:`Skeleton3D ` node. From afe1c82a0f0673bd2f7ab6f14366a0ce365d5982 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Fri, 16 Aug 2024 00:00:26 +0300 Subject: [PATCH 16/99] Update iOS system requirements. --- about/system_requirements.rst | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/about/system_requirements.rst b/about/system_requirements.rst index 528e1056c3e..f5a96f9b0d9 100644 --- a/about/system_requirements.rst +++ b/about/system_requirements.rst @@ -100,8 +100,7 @@ Mobile device (smartphone/tablet) - Minimum | | Exporting projects requires downloading export templates separately | | | (1.3 GB after installation). | +----------------------+-----------------------------------------------------------------------------------------+ -| **Operating system** | - **Native editor:** Android 6.0 (Compatibility) or Android 9.0 (Forward+/Mobile), | -| | iOS 11.0 | +| **Operating system** | - **Native editor:** Android 6.0 (Compatibility) or Android 9.0 (Forward+/Mobile) | | | - **Web editor:** Firefox 79, Chrome 88, Edge 79, Safari 15.2, Opera 64, | | | Samsung Internet 15 | +----------------------+-----------------------------------------------------------------------------------------+ @@ -174,7 +173,7 @@ Mobile device (smartphone/tablet) - Recommended +----------------------+-----------------------------------------------------------------------------------------+ | **Storage** | 1.5 GB (used for the executable, project files, all export templates and cache) | +----------------------+-----------------------------------------------------------------------------------------+ -| **Operating system** | - **Native editor:** Android 9.0 or iOS 11.0 | +| **Operating system** | - **Native editor:** Android 9.0 | | | - **Web editor:** Latest version of Firefox, Chrome, Edge, Safari, Opera, | | | Samsung Internet | +----------------------+-----------------------------------------------------------------------------------------+ @@ -268,15 +267,15 @@ Mobile device (smartphone/tablet) - Minimum +----------------------+-----------------------------------------------------------------------------------------+ | **GPU** | - **Forward+ rendering method:** SoC featuring GPU with full Vulkan 1.0 support | | | | -| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2, PowerVR G6430 (iPhone 6S/iPhone SE 1)* | +| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2, Apple A12 (iPhone XR/XS)* | | | | | | - **Mobile rendering method:** SoC featuring GPU with full Vulkan 1.0 support | | | | -| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2, PowerVR G6430 (iPhone 6S/iPhone SE 1)* | +| | - *Example: Qualcomm Adreno 505, Mali-G71 MP2, Apple A12 (iPhone XR/XS)* | | | | | | - **Compatibility rendering method:** SoC featuring GPU with full OpenGL ES 3.0 support | | | | -| | - *Example: Qualcomm Adreno 306, Mali-T628 MP6, PowerVR G6430 (iPhone 5S)* | +| | - *Example: Qualcomm Adreno 306, Mali-T628 MP6, Apple A7 (iPhone 5S)* | +----------------------+-----------------------------------------------------------------------------------------+ | **RAM** | - **For native exports:** 1 GB | | | - **For web exports:** 2 GB | @@ -284,7 +283,7 @@ Mobile device (smartphone/tablet) - Minimum | **Storage** | 150 MB (used for the executable, project files and cache) | +----------------------+-----------------------------------------------------------------------------------------+ | **Operating system** | - **For native exports:** Android 6.0 (Compatibility) or Android 9.0 (Forward+/Mobile), | -| | iOS 11.0 | +| | iOS 12.0 | | | - **For web exports:** Firefox 79, Chrome 88, Edge 79, Safari 15.2, Opera 64, | | | Samsung Internet 15 | +----------------------+-----------------------------------------------------------------------------------------+ @@ -340,26 +339,26 @@ Mobile device (smartphone/tablet) - Recommended | | | | | - **iOS:** SoC with 64-bit ARM CPU | | | | -| | - *Example: Apple A11 (iPhone XS/XR)* | +| | - *Example: Apple A14 (iPhone 12)* | +----------------------+-----------------------------------------------------------------------------------------+ | **GPU** | - **Forward+ rendering method:** SoC featuring GPU with full Vulkan 1.2 support | | | | -| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)* | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple A14 (iPhone 12)* | | | | | | - **Mobile rendering method:** SoC featuring GPU with full Vulkan 1.2 support | | | | -| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)* | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple A14 (iPhone 12)* | | | | | | - **Compatibility rendering method:** SoC featuring GPU with full OpenGL ES 3.2 support | | | | -| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)* | +| | - *Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple A14 (iPhone 12)* | +----------------------+-----------------------------------------------------------------------------------------+ | **RAM** | - **For native exports:** 2 GB | | | - **For web exports:** 4 GB | +----------------------+-----------------------------------------------------------------------------------------+ | **Storage** | 150 MB (used for the executable, project files and cache) | +----------------------+-----------------------------------------------------------------------------------------+ -| **Operating system** | - **For native exports:** Android 9.0 or iOS 11.0 | +| **Operating system** | - **For native exports:** Android 9.0 or iOS 14.1 | | | - **For web exports:** Latest version of Firefox, Chrome, Edge, Safari, Opera, | | | Samsung Internet | +----------------------+-----------------------------------------------------------------------------------------+ From c476471e48666eda5da90fc96c8ca2510cffea2f Mon Sep 17 00:00:00 2001 From: Malcolm Nixon Date: Thu, 15 Aug 2024 19:28:44 -0400 Subject: [PATCH 17/99] This PR adds graphs showing the behavior of the smoothstep function with positive, zero, and negative ranges. (#9489) --- img/smoothstep_range.webp | Bin 0 -> 17058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/smoothstep_range.webp diff --git a/img/smoothstep_range.webp b/img/smoothstep_range.webp new file mode 100644 index 0000000000000000000000000000000000000000..08a5fb796f7fdfb54ce3fa829c7e8038dd7b4ac1 GIT binary patch literal 17058 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 Date: Fri, 16 Aug 2024 12:11:21 -0700 Subject: [PATCH 18/99] Fix compile error in advanced_postprocessing.rst --- tutorials/shaders/advanced_postprocessing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/shaders/advanced_postprocessing.rst b/tutorials/shaders/advanced_postprocessing.rst index e06b97e148a..d562e8fd790 100644 --- a/tutorials/shaders/advanced_postprocessing.rst +++ b/tutorials/shaders/advanced_postprocessing.rst @@ -47,7 +47,7 @@ and sets the vertex position in clip space directly. shader_type spatial; // Prevent the quad from being affected by lighting and fog. This also improves performance. - render_mode unshaded, disable_fog; + render_mode unshaded, fog_disabled; void vertex() { POSITION = vec4(VERTEX.xy, 1.0, 1.0); From 0f8477ae1902dde8ef821a47fba909b34052489d Mon Sep 17 00:00:00 2001 From: Cordell <63482974+cordellbonnieux@users.noreply.github.com> Date: Fri, 16 Aug 2024 20:05:45 -0700 Subject: [PATCH 19/99] Update navigation_using_navigationagents.rst In "avoidance_priority" property description, changed "important npcs characters" to "important non playable characters". The term "npc", means "non playable character", so to say "non playable characters characters" seems like an error. --- tutorials/navigation/navigation_using_navigationagents.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/navigation/navigation_using_navigationagents.rst b/tutorials/navigation/navigation_using_navigationagents.rst index b22be476db4..a13d34859db 100644 --- a/tutorials/navigation/navigation_using_navigationagents.rst +++ b/tutorials/navigation/navigation_using_navigationagents.rst @@ -121,7 +121,7 @@ The following NavigationAgent properties are relevant for avoidance: - The property ``use_3d_avoidance`` switches the agent between the 2D avoidance (xz axis) and the 3D avoidance (xyz axis) on the next update. Note that 2D avoidance and 3D avoidance run in separate avoidance simulations so agents split between them do not affect each other. - The properties ``avoidance_layers`` and ``avoidance_mask`` are bitmasks similar to e.g. physics layers. Agents will only avoid other avoidance objects that are on an avoidance layer that matches at least one of their own avoidance mask bits. - - The ``avoidance_priority`` makes agents with a higher priority ignore agents with a lower priority. This can be used to give certain agents more importance in the avoidance simulation, e.g. important npcs characters, without constantly changing their entire avoidance layers or mask. + - The ``avoidance_priority`` makes agents with a higher priority ignore agents with a lower priority. This can be used to give certain agents more importance in the avoidance simulation, e.g. important non playable characters, without constantly changing their entire avoidance layers or mask. Avoidance exists in its own space and has no information from navigation meshes or physics collision. From 5a25f5357e43478b27f3c4802db4cb54a36eea43 Mon Sep 17 00:00:00 2001 From: Godot Organization Date: Sat, 17 Aug 2024 03:20:21 +0000 Subject: [PATCH 20/99] classref: Sync with current master branch (1bd740d) --- classes/class_@globalscope.rst | 10 +- classes/class_animationnodeblendspace2d.rst | 4 +- classes/class_classdb.rst | 28 +++ classes/class_compositor.rst | 7 + classes/class_compositoreffect.rst | 7 + classes/class_editorsettings.rst | 20 +- classes/class_geometry2d.rst | 35 +++- classes/class_gltfaccessor.rst | 12 +- classes/class_gltfanimation.rst | 4 +- classes/class_gltfbufferview.rst | 4 +- classes/class_gltfcamera.rst | 18 +- classes/class_gltfdocument.rst | 10 +- classes/class_gltfdocumentextension.rst | 20 +- classes/class_gltflight.rst | 8 +- classes/class_gltfmesh.rst | 8 +- classes/class_gltfnode.rst | 32 +-- classes/class_gltfphysicsbody.rst | 10 +- classes/class_gltfphysicsshape.rst | 10 +- classes/class_gltfskeleton.rst | 4 +- classes/class_gltfspecgloss.rst | 6 +- classes/class_gltfstate.rst | 48 ++--- classes/class_gltftexture.rst | 2 +- classes/class_gltftexturesampler.rst | 4 +- classes/class_multiplayerspawner.rst | 4 +- classes/class_navigationlink2d.rst | 28 +++ classes/class_navigationlink3d.rst | 28 +++ classes/class_navigationserver3d.rst | 8 + classes/class_node3d.rst | 18 ++ classes/class_performance.rst | 10 +- classes/class_polygon2d.rst | 14 -- classes/class_projectsettings.rst | 80 +++++++- classes/class_renderingserver.rst | 30 +++ classes/class_resourceimporterdynamicfont.rst | 6 +- classes/class_resourceimporterimagefont.rst | 2 +- classes/class_resourceimporterobj.rst | 14 -- classes/class_shapecast2d.rst | 4 + classes/class_shapecast3d.rst | 4 + classes/class_textserver.rst | 14 ++ classes/class_textserverextension.rst | 16 ++ classes/class_tilemap.rst | 42 ++++ classes/class_tilemaplayer.rst | 42 ++++ classes/class_timer.rst | 2 +- classes/class_viewport.rst | 188 +++++++++--------- 43 files changed, 624 insertions(+), 241 deletions(-) diff --git a/classes/class_@globalscope.rst b/classes/class_@globalscope.rst index 2e072c6768f..d75064ca920 100644 --- a/classes/class_@globalscope.rst +++ b/classes/class_@globalscope.rst @@ -7072,9 +7072,11 @@ Returns the hyperbolic sine of ``x``. :ref:`float` **smoothstep**\ (\ from\: :ref:`float`, to\: :ref:`float`, x\: :ref:`float`\ ) :ref:`🔗` -Returns the result of smoothly interpolating the value of ``x`` between ``0`` and ``1``, based on the where ``x`` lies with respect to the edges ``from`` and ``to``. +Returns a smooth cubic Hermite interpolation between ``0`` and ``1``. -The return value is ``0`` if ``x <= from``, and ``1`` if ``x >= to``. If ``x`` lies between ``from`` and ``to``, the returned value follows an S-shaped curve that maps ``x`` between ``0`` and ``1``. +For positive ranges (when ``from <= to``) the return value is ``0`` when ``x <= from``, and ``1`` when ``x >= to``. If ``x`` lies between ``from`` and ``to``, the return value follows an S-shaped curve that smoothly transitions from ``0`` to ``1``. + +For negative ranges (when ``from > to``) the function is mirrored and returns ``1`` when ``x <= to`` and ``0`` when ``x >= from``. This S-shaped curve is the cubic Hermite interpolator, given by ``f(y) = 3*y^2 - 2*y^3`` where ``y = (x-from) / (to-from)``. @@ -7087,7 +7089,9 @@ This S-shaped curve is the cubic Hermite interpolator, given by ``f(y) = 3*y^2 - Compared to :ref:`ease` with a curve value of ``-1.6521``, :ref:`smoothstep` returns the smoothest possible curve with no sudden changes in the derivative. If you need to perform more advanced transitions, use :ref:`Tween` or :ref:`AnimationPlayer`. -\ `Comparison between smoothstep() and ease(x, -1.6521) return values `__ +\ `Comparison between smoothstep() and ease(x, -1.6521) return values `__\ + +\ `Smoothstep() return values with positive, zero, and negative ranges `__ .. rst-class:: classref-item-separator diff --git a/classes/class_animationnodeblendspace2d.rst b/classes/class_animationnodeblendspace2d.rst index 506b47bff25..c107fffa9f8 100644 --- a/classes/class_animationnodeblendspace2d.rst +++ b/classes/class_animationnodeblendspace2d.rst @@ -21,7 +21,7 @@ Description A resource used by :ref:`AnimationNodeBlendTree`. -\ :ref:`AnimationNodeBlendSpace1D` represents a virtual 2D space on which :ref:`AnimationRootNode`\ s are placed. Outputs the linear blend of the three adjacent animations using a :ref:`Vector2` weight. Adjacent in this context means the three :ref:`AnimationRootNode`\ s making up the triangle that contains the current value. +\ **AnimationNodeBlendSpace2D** represents a virtual 2D space on which :ref:`AnimationRootNode`\ s are placed. Outputs the linear blend of the three adjacent animations using a :ref:`Vector2` weight. Adjacent in this context means the three :ref:`AnimationRootNode`\ s making up the triangle that contains the current value. You can add vertices to the blend space with :ref:`add_blend_point` and automatically triangulate it by setting :ref:`auto_triangles` to ``true``. Otherwise, use :ref:`add_triangle` and :ref:`remove_triangle` to triangulate the blend space by hand. @@ -426,7 +426,7 @@ Changes the :ref:`AnimationNode` referenced by the point at |void| **set_blend_point_position**\ (\ point\: :ref:`int`, pos\: :ref:`Vector2`\ ) :ref:`🔗` -Updates the position of the point at index ``point`` on the blend axis. +Updates the position of the point at index ``point`` in the blend space. .. |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_classdb.rst b/classes/class_classdb.rst index 9c5b481cd22..eec74ca2073 100644 --- a/classes/class_classdb.rst +++ b/classes/class_classdb.rst @@ -52,8 +52,12 @@ Methods +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Variant` | :ref:`class_get_property_default_value`\ (\ class\: :ref:`StringName`, property\: :ref:`StringName`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`StringName` | :ref:`class_get_property_getter`\ (\ class\: :ref:`StringName`, property\: :ref:`StringName`\ ) | + +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array`\[:ref:`Dictionary`\] | :ref:`class_get_property_list`\ (\ class\: :ref:`StringName`, no_inheritance\: :ref:`bool` = false\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`StringName` | :ref:`class_get_property_setter`\ (\ class\: :ref:`StringName`, property\: :ref:`StringName`\ ) | + +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Dictionary` | :ref:`class_get_signal`\ (\ class\: :ref:`StringName`, signal\: :ref:`StringName`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array`\[:ref:`Dictionary`\] | :ref:`class_get_signal_list`\ (\ class\: :ref:`StringName`, no_inheritance\: :ref:`bool` = false\ ) |const| | @@ -226,6 +230,18 @@ Returns the default value of ``property`` of ``class`` or its ancestor classes. ---- +.. _class_ClassDB_method_class_get_property_getter: + +.. rst-class:: classref-method + +:ref:`StringName` **class_get_property_getter**\ (\ class\: :ref:`StringName`, property\: :ref:`StringName`\ ) :ref:`🔗` + +Returns the getter method name of ``property`` of ``class``. + +.. rst-class:: classref-item-separator + +---- + .. _class_ClassDB_method_class_get_property_list: .. rst-class:: classref-method @@ -238,6 +254,18 @@ Returns an array with all the properties of ``class`` or its ancestry if ``no_in ---- +.. _class_ClassDB_method_class_get_property_setter: + +.. rst-class:: classref-method + +:ref:`StringName` **class_get_property_setter**\ (\ class\: :ref:`StringName`, property\: :ref:`StringName`\ ) :ref:`🔗` + +Returns the setter method name of ``property`` of ``class``. + +.. rst-class:: classref-item-separator + +---- + .. _class_ClassDB_method_class_get_signal: .. rst-class:: classref-method diff --git a/classes/class_compositor.rst b/classes/class_compositor.rst index ec0e40c519f..31533f286bf 100644 --- a/classes/class_compositor.rst +++ b/classes/class_compositor.rst @@ -23,6 +23,13 @@ Description The compositor resource stores attributes used to customize how a :ref:`Viewport` is rendered. +.. rst-class:: classref-introduction-group + +Tutorials +--------- + +- :doc:`The Compositor <../tutorials/rendering/compositor>` + .. rst-class:: classref-reftable-group Properties diff --git a/classes/class_compositoreffect.rst b/classes/class_compositoreffect.rst index 9c644ec5d53..a72da698208 100644 --- a/classes/class_compositoreffect.rst +++ b/classes/class_compositoreffect.rst @@ -23,6 +23,13 @@ Description This resource defines a custom rendering effect that can be applied to :ref:`Viewport`\ s through the viewports' :ref:`Environment`. You can implement a callback that is called during rendering at a given stage of the rendering pipeline and allows you to insert additional passes. Note that this callback happens on the rendering thread. CompositorEffect is an abstract base class and must be extended to implement specific rendering logic. +.. rst-class:: classref-introduction-group + +Tutorials +--------- + +- :doc:`The Compositor <../tutorials/rendering/compositor>` + .. rst-class:: classref-reftable-group Properties diff --git a/classes/class_editorsettings.rst b/classes/class_editorsettings.rst index 0a147646091..46ebaf4dacc 100644 --- a/classes/class_editorsettings.rst +++ b/classes/class_editorsettings.rst @@ -337,6 +337,8 @@ Properties +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`interface/editor/expand_to_title` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`interface/editor/font_allow_msdf` | + +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`interface/editor/font_antialiasing` | +---------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`interface/editor/font_disable_embedded_bitmaps` | @@ -1289,7 +1291,7 @@ The grid size in units. Higher values prevent the grid from appearing "cut off" :ref:`bool` **editors/3d/grid_xy_plane** :ref:`🔗` -If ``true``, render the grid on an XY plane. This can be useful for 3D side-scrolling games. +If ``true``, renders the grid on the XY plane in perspective view. This can be useful for 3D side-scrolling games. .. rst-class:: classref-item-separator @@ -1301,7 +1303,7 @@ If ``true``, render the grid on an XY plane. This can be useful for 3D side-scro :ref:`bool` **editors/3d/grid_xz_plane** :ref:`🔗` -If ``true``, render the grid on an XZ plane. +If ``true``, renders the grid on the XZ plane in perspective view. .. rst-class:: classref-item-separator @@ -1313,7 +1315,7 @@ If ``true``, render the grid on an XZ plane. :ref:`bool` **editors/3d/grid_yz_plane** :ref:`🔗` -If ``true``, render the grid on a YZ plane. This can be useful for 3D side-scrolling games. +If ``true``, renders the grid on the YZ plane in perspective view. This can be useful for 3D side-scrolling games. .. rst-class:: classref-item-separator @@ -2575,6 +2577,18 @@ Specific to the macOS platform. ---- +.. _class_EditorSettings_property_interface/editor/font_allow_msdf: + +.. rst-class:: classref-property + +:ref:`bool` **interface/editor/font_allow_msdf** :ref:`🔗` + +If set to ``true``, MSDF font rendering will be used for the visual shader graph editor. You may need to set this to ``false`` when using a custom main font, as some fonts will look broken due to the use of self-intersecting outlines in their font data. Downloading the font from the font maker's official website as opposed to a service like Google Fonts can help resolve this issue. + +.. rst-class:: classref-item-separator + +---- + .. _class_EditorSettings_property_interface/editor/font_antialiasing: .. rst-class:: classref-property diff --git a/classes/class_geometry2d.rst b/classes/class_geometry2d.rst index dc692e09d7a..023e8858327 100644 --- a/classes/class_geometry2d.rst +++ b/classes/class_geometry2d.rst @@ -387,9 +387,40 @@ Returns ``true`` if ``polygon``'s vertices are ordered in clockwise order, other :ref:`Variant` **line_intersects_line**\ (\ from_a\: :ref:`Vector2`, dir_a\: :ref:`Vector2`, from_b\: :ref:`Vector2`, dir_b\: :ref:`Vector2`\ ) :ref:`🔗` -Checks if the two lines (``from_a``, ``dir_a``) and (``from_b``, ``dir_b``) intersect. If yes, return the point of intersection as :ref:`Vector2`. If no intersection takes place, returns ``null``. +Returns the point of intersection between the two lines (``from_a``, ``dir_a``) and (``from_b``, ``dir_b``). Returns a :ref:`Vector2`, or ``null`` if the lines are parallel. + +\ ``from`` and ``dir`` are *not* endpoints of a line segment or ray but the slope (``dir``) and a known point (``from``) on that line. + + +.. tabs:: + + .. code-tab:: gdscript + + var from_a = Vector2.ZERO + var dir_a = Vector2.RIGHT + var from_b = Vector2.DOWN + + # Returns Vector2(1, 0) + Geometry2D.line_intersects_line(from_a, dir_a, from_b, Vector2(1, -1)) + # Returns Vector2(-1, 0) + Geometry2D.line_intersects_line(from_a, dir_a, from_b, Vector2(-1, -1)) + # Returns null + Geometry2D.line_intersects_line(from_a, dir_a, from_b, Vector2.RIGHT) + + .. code-tab:: csharp + + var fromA = Vector2.Zero; + var dirA = Vector2.Right; + var fromB = Vector2.Down; + + // Returns new Vector2(1, 0) + Geometry2D.LineIntersectsLine(fromA, dirA, fromB, new Vector2(1, -1)); + // Returns new Vector2(-1, 0) + Geometry2D.LineIntersectsLine(fromA, dirA, fromB, new Vector2(-1, -1)); + // Returns null + Geometry2D.LineIntersectsLine(fromA, dirA, fromB, Vector2.Right); + -\ **Note:** The lines are specified using direction vectors, not end points. .. rst-class:: classref-item-separator diff --git a/classes/class_gltfaccessor.rst b/classes/class_gltfaccessor.rst index d3febd05a38..dc3b57eba93 100644 --- a/classes/class_gltfaccessor.rst +++ b/classes/class_gltfaccessor.rst @@ -12,16 +12,16 @@ GLTFAccessor **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF accessor. +Represents a glTF accessor. .. rst-class:: classref-introduction-group Description ----------- -GLTFAccessor is a data structure representing GLTF a ``accessor`` that would be found in the ``"accessors"`` array. A buffer is a blob of binary data. A buffer view is a slice of a buffer. An accessor is a typed interpretation of the data in a buffer view. +GLTFAccessor is a data structure representing a glTF ``accessor`` that would be found in the ``"accessors"`` array. A buffer is a blob of binary data. A buffer view is a slice of a buffer. An accessor is a typed interpretation of the data in a buffer view. -Most custom data stored in GLTF does not need accessors, only buffer views (see :ref:`GLTFBufferView`). Accessors are for more advanced use cases such as interleaved mesh data encoded for the GPU. +Most custom data stored in glTF does not need accessors, only buffer views (see :ref:`GLTFBufferView`). Accessors are for more advanced use cases such as interleaved mesh data encoded for the GPU. .. rst-class:: classref-introduction-group @@ -163,7 +163,7 @@ Property Descriptions - |void| **set_accessor_type**\ (\ value\: :ref:`GLTFAccessorType`\ ) - :ref:`GLTFAccessorType` **get_accessor_type**\ (\ ) -The GLTF accessor type as an enum. Possible values are 0 for "SCALAR", 1 for "VEC2", 2 for "VEC3", 3 for "VEC4", 4 for "MAT2", 5 for "MAT3", and 6 for "MAT4". +The glTF accessor type as an enum. Possible values are 0 for "SCALAR", 1 for "VEC2", 2 for "VEC3", 3 for "VEC4", 4 for "MAT2", 5 for "MAT3", and 6 for "MAT4". .. rst-class:: classref-item-separator @@ -214,7 +214,7 @@ The offset relative to the start of the buffer view in bytes. - |void| **set_component_type**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_component_type**\ (\ ) -The GLTF component type as an enum. Possible values are 5120 for "BYTE", 5121 for "UNSIGNED_BYTE", 5122 for "SHORT", 5123 for "UNSIGNED_SHORT", 5125 for "UNSIGNED_INT", and 5126 for "FLOAT". A value of 5125 or "UNSIGNED_INT" must not be used for any accessor that is not referenced by mesh.primitive.indices. +The glTF component type as an enum. Possible values are 5120 for "BYTE", 5121 for "UNSIGNED_BYTE", 5122 for "SHORT", 5123 for "UNSIGNED_SHORT", 5125 for "UNSIGNED_INT", and 5126 for "FLOAT". A value of 5125 or "UNSIGNED_INT" must not be used for any accessor that is not referenced by mesh.primitive.indices. .. rst-class:: classref-item-separator @@ -403,7 +403,7 @@ The offset relative to the start of the bufferView in bytes. **Deprecated:** Use :ref:`accessor_type` instead. -The GLTF accessor type as an enum. Use :ref:`accessor_type` instead. +The glTF accessor type as an enum. Use :ref:`accessor_type` instead. .. |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_gltfanimation.rst b/classes/class_gltfanimation.rst index fd6195bdee6..1b5b651824b 100644 --- a/classes/class_gltfanimation.rst +++ b/classes/class_gltfanimation.rst @@ -109,7 +109,7 @@ Method Descriptions Gets additional arbitrary data in this **GLTFAnimation** instance. This can be used to keep per-node state data in :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the return value can be anything you set. If nothing was set, the return value is null. +The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the return value can be anything you set. If nothing was set, the return value is null. .. rst-class:: classref-item-separator @@ -123,7 +123,7 @@ The argument should be the :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the second argument can be anything you want. +The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the second argument can be anything you want. .. |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_gltfbufferview.rst b/classes/class_gltfbufferview.rst index dc1f3c1cb81..2bc977316a4 100644 --- a/classes/class_gltfbufferview.rst +++ b/classes/class_gltfbufferview.rst @@ -12,14 +12,14 @@ GLTFBufferView **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF buffer view. +Represents a glTF buffer view. .. rst-class:: classref-introduction-group Description ----------- -GLTFBufferView is a data structure representing GLTF a ``bufferView`` that would be found in the ``"bufferViews"`` array. A buffer is a blob of binary data. A buffer view is a slice of a buffer that can be used to identify and extract data from the buffer. +GLTFBufferView is a data structure representing a glTF ``bufferView`` that would be found in the ``"bufferViews"`` array. A buffer is a blob of binary data. A buffer view is a slice of a buffer that can be used to identify and extract data from the buffer. Most custom uses of buffers only need to use the :ref:`buffer`, :ref:`byte_length`, and :ref:`byte_offset`. The :ref:`byte_stride` and :ref:`indices` properties are for more advanced use cases such as interleaved mesh data encoded for the GPU. diff --git a/classes/class_gltfcamera.rst b/classes/class_gltfcamera.rst index 418bbfa1c25..b1eced242cc 100644 --- a/classes/class_gltfcamera.rst +++ b/classes/class_gltfcamera.rst @@ -12,14 +12,14 @@ GLTFCamera **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF camera. +Represents a glTF camera. .. rst-class:: classref-introduction-group Description ----------- -Represents a camera as defined by the base GLTF spec. +Represents a camera as defined by the base glTF spec. .. rst-class:: classref-introduction-group @@ -28,9 +28,9 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `GLTF camera detailed specification `__ +- `glTF camera detailed specification `__ -- `GLTF camera spec and example file `__ +- `glTF camera spec and example file `__ .. rst-class:: classref-reftable-group @@ -90,7 +90,7 @@ Property Descriptions - |void| **set_depth_far**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_depth_far**\ (\ ) -The distance to the far culling boundary for this camera relative to its local Z axis, in meters. This maps to GLTF's ``zfar`` property. +The distance to the far culling boundary for this camera relative to its local Z axis, in meters. This maps to glTF's ``zfar`` property. .. rst-class:: classref-item-separator @@ -107,7 +107,7 @@ The distance to the far culling boundary for this camera relative to its local Z - |void| **set_depth_near**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_depth_near**\ (\ ) -The distance to the near culling boundary for this camera relative to its local Z axis, in meters. This maps to GLTF's ``znear`` property. +The distance to the near culling boundary for this camera relative to its local Z axis, in meters. This maps to glTF's ``znear`` property. .. rst-class:: classref-item-separator @@ -124,7 +124,7 @@ The distance to the near culling boundary for this camera relative to its local - |void| **set_fov**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_fov**\ (\ ) -The FOV of the camera. This class and GLTF define the camera FOV in radians, while Godot uses degrees. This maps to GLTF's ``yfov`` property. This value is only used for perspective cameras, when :ref:`perspective` is true. +The FOV of the camera. This class and glTF define the camera FOV in radians, while Godot uses degrees. This maps to glTF's ``yfov`` property. This value is only used for perspective cameras, when :ref:`perspective` is true. .. rst-class:: classref-item-separator @@ -141,7 +141,7 @@ The FOV of the camera. This class and GLTF define the camera FOV in radians, whi - |void| **set_perspective**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **get_perspective**\ (\ ) -Whether or not the camera is in perspective mode. If false, the camera is in orthographic/orthogonal mode. This maps to GLTF's camera ``type`` property. See :ref:`Camera3D.projection` and the GLTF spec for more information. +Whether or not the camera is in perspective mode. If false, the camera is in orthographic/orthogonal mode. This maps to glTF's camera ``type`` property. See :ref:`Camera3D.projection` and the glTF spec for more information. .. rst-class:: classref-item-separator @@ -158,7 +158,7 @@ Whether or not the camera is in perspective mode. If false, the camera is in ort - |void| **set_size_mag**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_size_mag**\ (\ ) -The size of the camera. This class and GLTF define the camera size magnitude as a radius in meters, while Godot defines it as a diameter in meters. This maps to GLTF's ``ymag`` property. This value is only used for orthographic/orthogonal cameras, when :ref:`perspective` is false. +The size of the camera. This class and glTF define the camera size magnitude as a radius in meters, while Godot defines it as a diameter in meters. This maps to glTF's ``ymag`` property. This value is only used for orthographic/orthogonal cameras, when :ref:`perspective` is false. .. rst-class:: classref-section-separator diff --git a/classes/class_gltfdocument.rst b/classes/class_gltfdocument.rst index f5d8a657bc0..40b2c1d392d 100644 --- a/classes/class_gltfdocument.rst +++ b/classes/class_gltfdocument.rst @@ -23,7 +23,7 @@ Description GLTFDocument supports reading data from a glTF file, buffer, or Godot scene. This data can then be written to the filesystem, buffer, or used to create a Godot scene. -All of the data in a GLTF scene is stored in the :ref:`GLTFState` class. GLTFDocument processes state objects, but does not contain any scene data itself. GLTFDocument has member variables to store export configuration settings such as the image format, but is otherwise stateless. Multiple scenes can be processed with the same settings using the same GLTFDocument object and different :ref:`GLTFState` objects. +All of the data in a glTF scene is stored in the :ref:`GLTFState` class. GLTFDocument processes state objects, but does not contain any scene data itself. GLTFDocument has member variables to store export configuration settings such as the image format, but is otherwise stateless. Multiple scenes can be processed with the same settings using the same GLTFDocument object and different :ref:`GLTFState` objects. GLTFDocument can be extended with arbitrary functionality by extending the :ref:`GLTFDocumentExtension` class and registering it with GLTFDocument via :ref:`register_gltf_document_extension`. This allows for custom data to be imported and exported. @@ -139,7 +139,7 @@ Property Descriptions - |void| **set_image_format**\ (\ value\: :ref:`String`\ ) - :ref:`String` **get_image_format**\ (\ ) -The user-friendly name of the export image format. This is used when exporting the GLTF file, including writing to a file and writing to a byte array. +The user-friendly name of the export image format. This is used when exporting the glTF file, including writing to a file and writing to a byte array. By default, Godot allows the following options: "None", "PNG", "JPEG", "Lossless WebP", and "Lossy WebP". Support for more image formats can be added in :ref:`GLTFDocumentExtension` classes. @@ -194,7 +194,7 @@ Method Descriptions :ref:`Error` **append_from_buffer**\ (\ bytes\: :ref:`PackedByteArray`, base_path\: :ref:`String`, state\: :ref:`GLTFState`, flags\: :ref:`int` = 0\ ) :ref:`🔗` -Takes a :ref:`PackedByteArray` defining a GLTF and imports the data to the given :ref:`GLTFState` object through the ``state`` parameter. +Takes a :ref:`PackedByteArray` defining a glTF and imports the data to the given :ref:`GLTFState` object through the ``state`` parameter. \ **Note:** The ``base_path`` tells :ref:`append_from_buffer` where to find dependencies and can be empty. @@ -208,7 +208,7 @@ Takes a :ref:`PackedByteArray` defining a GLTF and import :ref:`Error` **append_from_file**\ (\ path\: :ref:`String`, state\: :ref:`GLTFState`, flags\: :ref:`int` = 0, base_path\: :ref:`String` = ""\ ) :ref:`🔗` -Takes a path to a GLTF file and imports the data at that file path to the given :ref:`GLTFState` object through the ``state`` parameter. +Takes a path to a glTF file and imports the data at that file path to the given :ref:`GLTFState` object through the ``state`` parameter. \ **Note:** The ``base_path`` tells :ref:`append_from_file` where to find dependencies and can be empty. @@ -234,7 +234,7 @@ Takes a Godot Engine scene node and exports it and its descendants to the given :ref:`PackedByteArray` **generate_buffer**\ (\ state\: :ref:`GLTFState`\ ) :ref:`🔗` -Takes a :ref:`GLTFState` object through the ``state`` parameter and returns a GLTF :ref:`PackedByteArray`. +Takes a :ref:`GLTFState` object through the ``state`` parameter and returns a glTF :ref:`PackedByteArray`. .. rst-class:: classref-item-separator diff --git a/classes/class_gltfdocumentextension.rst b/classes/class_gltfdocumentextension.rst index 9daad61f3f2..8e846284b76 100644 --- a/classes/class_gltfdocumentextension.rst +++ b/classes/class_gltfdocumentextension.rst @@ -21,7 +21,7 @@ GLTFDocumentExtension Description ----------- -Extends the functionality of the :ref:`GLTFDocument` class by allowing you to run arbitrary code at various stages of GLTF import or export. +Extends the functionality of the :ref:`GLTFDocument` class by allowing you to run arbitrary code at various stages of glTF import or export. To use, make a new class extending GLTFDocumentExtension, override any methods you need, make an instance of your class, and register it using :ref:`GLTFDocument.register_gltf_document_extension`. @@ -113,7 +113,7 @@ Runs when converting the data from a Godot scene node. This method can be used t Part of the export process. This method is run after :ref:`_get_saveable_image_formats` and before :ref:`_export_post`. If this **GLTFDocumentExtension** is used for exporting images, this runs after :ref:`_serialize_texture_json`. -This method can be used to modify the final JSON of each node. Data should be primarily stored in ``gltf_node`` prior to serializing the JSON, but the original Godot ``node`` is also provided if available. The node may be null if not available, such as when exporting GLTF data not generated from a Godot scene. +This method can be used to modify the final JSON of each node. Data should be primarily stored in ``gltf_node`` prior to serializing the JSON, but the original Godot ``node`` is also provided if available. The node may be null if not available, such as when exporting glTF data not generated from a Godot scene. .. rst-class:: classref-item-separator @@ -127,7 +127,7 @@ This method can be used to modify the final JSON of each node. Data should be pr Part of the export process. This method is run last, after all other parts of the export process. -This method can be used to modify the final JSON of the generated GLTF file. +This method can be used to modify the final JSON of the generated glTF file. .. rst-class:: classref-item-separator @@ -141,7 +141,7 @@ This method can be used to modify the final JSON of the generated GLTF file. Part of the export process. This method is run first, before all other parts of the export process. -The return value is used to determine if this **GLTFDocumentExtension** instance should be used for exporting a given GLTF file. If :ref:`@GlobalScope.OK`, the export will use this **GLTFDocumentExtension** instance. If not overridden, :ref:`@GlobalScope.OK` is returned. +The return value is used to determine if this **GLTFDocumentExtension** instance should be used for exporting a given glTF file. If :ref:`@GlobalScope.OK`, the export will use this **GLTFDocumentExtension** instance. If not overridden, :ref:`@GlobalScope.OK` is returned. .. rst-class:: classref-item-separator @@ -211,7 +211,7 @@ Returns an array of the image formats that can be saved/exported by this extensi Part of the import process. This method is run after :ref:`_import_preflight` and before :ref:`_parse_node_extensions`. -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. +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. .. rst-class:: classref-item-separator @@ -267,7 +267,7 @@ This method can be used to modify any of the data imported so far after parsing, Part of the import process. This method is run first, before all other parts of the import process. -The return value is used to determine if this **GLTFDocumentExtension** instance should be used for importing a given GLTF file. If :ref:`@GlobalScope.OK`, the import will use this **GLTFDocumentExtension** instance. If not overridden, :ref:`@GlobalScope.OK` is returned. +The return value is used to determine if this **GLTFDocumentExtension** instance should be used for importing a given glTF file. If :ref:`@GlobalScope.OK`, the import will use this **GLTFDocumentExtension** instance. If not overridden, :ref:`@GlobalScope.OK` is returned. .. rst-class:: classref-item-separator @@ -281,7 +281,7 @@ The return value is used to determine if this **GLTFDocumentExtension** instance Part of the import process. This method is run after :ref:`_parse_node_extensions` and before :ref:`_parse_texture_json`. -Runs when parsing image data from a GLTF file. The data could be sourced from a separate file, a URI, or a buffer, and then is passed as a byte array. +Runs when parsing image data from a glTF file. The data could be sourced from a separate file, a URI, or a buffer, and then is passed as a byte array. .. rst-class:: classref-item-separator @@ -309,7 +309,7 @@ Runs when parsing the node extensions of a GLTFNode. This method can be used to Part of the import process. This method is run after :ref:`_parse_image_data` and before :ref:`_generate_scene_node`. -Runs when parsing the texture JSON from the GLTF textures array. This can be used to set the source image index to use as the texture. +Runs when parsing the texture JSON from the glTF textures array. This can be used to set the source image index to use as the texture. .. rst-class:: classref-item-separator @@ -323,7 +323,7 @@ Runs when parsing the texture JSON from the GLTF textures array. This can be use Part of the export process. This method is run after :ref:`_get_saveable_image_formats` and before :ref:`_serialize_texture_json`. -This method is run when saving images separately from the GLTF file. When images are embedded, :ref:`_serialize_image_to_bytes` runs instead. Note that these methods only run when this **GLTFDocumentExtension** is selected as the image exporter. +This method is run when saving images separately from the glTF file. When images are embedded, :ref:`_serialize_image_to_bytes` runs instead. Note that these methods only run when this **GLTFDocumentExtension** is selected as the image exporter. .. rst-class:: classref-item-separator @@ -337,7 +337,7 @@ This method is run when saving images separately from the GLTF file. When images Part of the export process. This method is run after :ref:`_get_saveable_image_formats` and before :ref:`_serialize_texture_json`. -This method is run when embedding images in the GLTF file. When images are saved separately, :ref:`_save_image_at_path` runs instead. Note that these methods only run when this **GLTFDocumentExtension** is selected as the image exporter. +This method is run when embedding images in the glTF file. When images are saved separately, :ref:`_save_image_at_path` runs instead. Note that these methods only run when this **GLTFDocumentExtension** is selected as the image exporter. This method must set the image MIME type in the ``image_dict`` with the ``"mimeType"`` key. For example, for a PNG image, it would be set to ``"image/png"``. The return value must be a :ref:`PackedByteArray` containing the image data. diff --git a/classes/class_gltflight.rst b/classes/class_gltflight.rst index d92a7c3a890..f9c74903bc1 100644 --- a/classes/class_gltflight.rst +++ b/classes/class_gltflight.rst @@ -12,14 +12,14 @@ GLTFLight **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF light. +Represents a glTF light. .. rst-class:: classref-introduction-group Description ----------- -Represents a light as defined by the ``KHR_lights_punctual`` GLTF extension. +Represents a light as defined by the ``KHR_lights_punctual`` glTF extension. .. rst-class:: classref-introduction-group @@ -28,7 +28,7 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `KHR_lights_punctual GLTF extension spec `__ +- `KHR_lights_punctual glTF extension spec `__ .. rst-class:: classref-reftable-group @@ -183,7 +183,7 @@ At this angle, the light drops off to zero brightness. Between the inner and out - |void| **set_range**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_range**\ (\ ) -The range of the light, beyond which the light has no effect. GLTF lights with no range defined behave like physical lights (which have infinite range). When creating a Godot light, the range is clamped to 4096. +The range of the light, beyond which the light has no effect. glTF lights with no range defined behave like physical lights (which have infinite range). When creating a Godot light, the range is clamped to 4096. .. rst-class:: classref-section-separator diff --git a/classes/class_gltfmesh.rst b/classes/class_gltfmesh.rst index 1003478aa10..d56c474eec9 100644 --- a/classes/class_gltfmesh.rst +++ b/classes/class_gltfmesh.rst @@ -12,14 +12,14 @@ GLTFMesh **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -GLTFMesh represents a GLTF mesh. +GLTFMesh represents a glTF mesh. .. rst-class:: classref-introduction-group Description ----------- -GLTFMesh handles 3D mesh data imported from GLTF files. It includes properties for blend channels, blend weights, instance materials, and the mesh itself. +GLTFMesh handles 3D mesh data imported from glTF files. It includes properties for blend channels, blend weights, instance materials, and the mesh itself. .. rst-class:: classref-introduction-group @@ -152,7 +152,7 @@ Method Descriptions Gets additional arbitrary data in this **GLTFMesh** instance. This can be used to keep per-node state data in :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the return value can be anything you set. If nothing was set, the return value is null. +The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the return value can be anything you set. If nothing was set, the return value is null. .. rst-class:: classref-item-separator @@ -166,7 +166,7 @@ The argument should be the :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the second argument can be anything you want. +The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the second argument can be anything you want. .. |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_gltfnode.rst b/classes/class_gltfnode.rst index dde695d27d3..77459360253 100644 --- a/classes/class_gltfnode.rst +++ b/classes/class_gltfnode.rst @@ -12,16 +12,16 @@ GLTFNode **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -GLTF node class. +glTF node class. .. rst-class:: classref-introduction-group Description ----------- -Represents a GLTF node. GLTF nodes may have names, transforms, children (other GLTF nodes), and more specialized properties (represented by their own classes). +Represents a glTF node. glTF nodes may have names, transforms, children (other glTF nodes), and more specialized properties (represented by their own classes). -GLTF nodes generally exist inside of :ref:`GLTFState` which represents all data of a GLTF file. Most of GLTFNode's properties are indices of other data in the GLTF file. You can extend a GLTF node with additional properties by using :ref:`get_additional_data` and :ref:`set_additional_data`. +glTF nodes generally exist inside of :ref:`GLTFState` which represents all data of a glTF file. Most of GLTFNode's properties are indices of other data in the glTF file. You can extend a glTF node with additional properties by using :ref:`get_additional_data` and :ref:`set_additional_data`. .. rst-class:: classref-introduction-group @@ -30,7 +30,7 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `GLTF scene and node spec `__ +- `glTF scene and node spec `__ .. rst-class:: classref-reftable-group @@ -102,7 +102,7 @@ Property Descriptions - |void| **set_camera**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_camera**\ (\ ) -If this GLTF node is a camera, the index of the :ref:`GLTFCamera` in the :ref:`GLTFState` that describes the camera's properties. If -1, this node is not a camera. +If this glTF node is a camera, the index of the :ref:`GLTFCamera` in the :ref:`GLTFState` that describes the camera's properties. If -1, this node is not a camera. .. rst-class:: classref-item-separator @@ -119,7 +119,7 @@ If this GLTF node is a camera, the index of the :ref:`GLTFCamera`\ ) - :ref:`PackedInt32Array` **get_children**\ (\ ) -The indices of the child nodes in the :ref:`GLTFState`. If this GLTF node has no children, this will be an empty array. +The indices of the child nodes in the :ref:`GLTFState`. If this glTF node has no children, this will be an empty array. **Note:** The returned array is *copied* and any changes to it will not update the original property value. See :ref:`PackedInt32Array` for more details. @@ -155,7 +155,7 @@ How deep into the node hierarchy this node is. A root node will have a height of - |void| **set_light**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_light**\ (\ ) -If this GLTF node is a light, the index of the :ref:`GLTFLight` in the :ref:`GLTFState` that describes the light's properties. If -1, this node is not a light. +If this glTF node is a light, the index of the :ref:`GLTFLight` in the :ref:`GLTFState` that describes the light's properties. If -1, this node is not a light. .. rst-class:: classref-item-separator @@ -172,7 +172,7 @@ If this GLTF node is a light, the index of the :ref:`GLTFLight` - |void| **set_mesh**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_mesh**\ (\ ) -If this GLTF node is a mesh, the index of the :ref:`GLTFMesh` in the :ref:`GLTFState` that describes the mesh's properties. If -1, this node is not a mesh. +If this glTF node is a mesh, the index of the :ref:`GLTFMesh` in the :ref:`GLTFState` that describes the mesh's properties. If -1, this node is not a mesh. .. rst-class:: classref-item-separator @@ -223,7 +223,7 @@ The index of the parent node in the :ref:`GLTFState`. If -1, th - |void| **set_position**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_position**\ (\ ) -The position of the GLTF node relative to its parent. +The position of the glTF node relative to its parent. .. rst-class:: classref-item-separator @@ -240,7 +240,7 @@ The position of the GLTF node relative to its parent. - |void| **set_rotation**\ (\ value\: :ref:`Quaternion`\ ) - :ref:`Quaternion` **get_rotation**\ (\ ) -The rotation of the GLTF node relative to its parent. +The rotation of the glTF node relative to its parent. .. rst-class:: classref-item-separator @@ -257,7 +257,7 @@ The rotation of the GLTF node relative to its parent. - |void| **set_scale**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_scale**\ (\ ) -The scale of the GLTF node relative to its parent. +The scale of the glTF node relative to its parent. .. rst-class:: classref-item-separator @@ -274,7 +274,7 @@ The scale of the GLTF node relative to its parent. - |void| **set_skeleton**\ (\ value\: :ref:`int`\ ) - :ref:`int` **get_skeleton**\ (\ ) -If this GLTF node has a skeleton, the index of the :ref:`GLTFSkeleton` in the :ref:`GLTFState` that describes the skeleton's properties. If -1, this node does not have a skeleton. +If this glTF node has a skeleton, the index of the :ref:`GLTFSkeleton` in the :ref:`GLTFState` that describes the skeleton's properties. If -1, this node does not have a skeleton. .. rst-class:: classref-item-separator @@ -291,7 +291,7 @@ If this GLTF node has a skeleton, the index of the :ref:`GLTFSkeleton`\ ) - :ref:`int` **get_skin**\ (\ ) -If this GLTF node has a skin, the index of the :ref:`GLTFSkin` in the :ref:`GLTFState` that describes the skin's properties. If -1, this node does not have a skin. +If this glTF node has a skin, the index of the :ref:`GLTFSkin` in the :ref:`GLTFState` that describes the skin's properties. If -1, this node does not have a skin. .. rst-class:: classref-item-separator @@ -308,7 +308,7 @@ If this GLTF node has a skin, the index of the :ref:`GLTFSkin` i - |void| **set_xform**\ (\ value\: :ref:`Transform3D`\ ) - :ref:`Transform3D` **get_xform**\ (\ ) -The transform of the GLTF node relative to its parent. This property is usually unused since the position, rotation, and scale properties are preferred. +The transform of the glTF node relative to its parent. This property is usually unused since the position, rotation, and scale properties are preferred. .. rst-class:: classref-section-separator @@ -327,7 +327,7 @@ Method Descriptions Gets additional arbitrary data in this **GLTFNode** instance. This can be used to keep per-node state data in :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the return value can be anything you set. If nothing was set, the return value is null. +The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the return value can be anything you set. If nothing was set, the return value is null. .. rst-class:: classref-item-separator @@ -341,7 +341,7 @@ The argument should be the :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the second argument can be anything you want. +The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the second argument can be anything you want. .. |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_gltfphysicsbody.rst b/classes/class_gltfphysicsbody.rst index 4eb9962f904..e2879a47810 100644 --- a/classes/class_gltfphysicsbody.rst +++ b/classes/class_gltfphysicsbody.rst @@ -12,14 +12,14 @@ GLTFPhysicsBody **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF physics body. +Represents a glTF physics body. .. rst-class:: classref-introduction-group Description ----------- -Represents a physics body as an intermediary between the ``OMI_physics_body`` GLTF data and Godot's nodes, and it's abstracted in a way that allows adding support for different GLTF physics extensions in the future. +Represents a physics body as an intermediary between the ``OMI_physics_body`` glTF data and Godot's nodes, and it's abstracted in a way that allows adding support for different glTF physics extensions in the future. .. rst-class:: classref-introduction-group @@ -28,7 +28,7 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `OMI_physics_body GLTF extension `__ +- `OMI_physics_body glTF extension `__ .. rst-class:: classref-reftable-group @@ -236,7 +236,7 @@ Method Descriptions :ref:`GLTFPhysicsBody` **from_dictionary**\ (\ dictionary\: :ref:`Dictionary`\ ) |static| :ref:`🔗` -Creates a new GLTFPhysicsBody instance by parsing the given :ref:`Dictionary` in the ``OMI_physics_body`` GLTF extension format. +Creates a new GLTFPhysicsBody instance by parsing the given :ref:`Dictionary` in the ``OMI_physics_body`` glTF extension format. .. rst-class:: classref-item-separator @@ -260,7 +260,7 @@ Creates a new GLTFPhysicsBody instance from the given Godot :ref:`CollisionObjec :ref:`Dictionary` **to_dictionary**\ (\ ) |const| :ref:`🔗` -Serializes this GLTFPhysicsBody instance into a :ref:`Dictionary`. It will be in the format expected by the ``OMI_physics_body`` GLTF extension. +Serializes this GLTFPhysicsBody instance into a :ref:`Dictionary`. It will be in the format expected by the ``OMI_physics_body`` glTF extension. .. rst-class:: classref-item-separator diff --git a/classes/class_gltfphysicsshape.rst b/classes/class_gltfphysicsshape.rst index b0b5cb10d41..fae4b8bd87b 100644 --- a/classes/class_gltfphysicsshape.rst +++ b/classes/class_gltfphysicsshape.rst @@ -12,14 +12,14 @@ GLTFPhysicsShape **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF physics shape. +Represents a glTF physics shape. .. rst-class:: classref-introduction-group Description ----------- -Represents a physics shape as defined by the ``OMI_physics_shape`` or ``OMI_collider`` GLTF extensions. This class is an intermediary between the GLTF data and Godot's nodes, and it's abstracted in a way that allows adding support for different GLTF physics extensions in the future. +Represents a physics shape as defined by the ``OMI_physics_shape`` or ``OMI_collider`` glTF extensions. This class is an intermediary between the glTF data and Godot's nodes, and it's abstracted in a way that allows adding support for different glTF physics extensions in the future. .. rst-class:: classref-introduction-group @@ -28,9 +28,9 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `OMI_physics_shape GLTF extension `__ +- `OMI_physics_shape glTF extension `__ -- `OMI_collider GLTF extension `__ +- `OMI_collider glTF extension `__ .. rst-class:: classref-reftable-group @@ -151,7 +151,7 @@ This is the only variable not used in the :ref:`to_node`\ ) - :ref:`int` **get_mesh_index**\ (\ ) -The index of the shape's mesh in the GLTF file. This is only used when the shape type is "hull" (convex hull) or "trimesh" (concave trimesh). +The index of the shape's mesh in the glTF file. This is only used when the shape type is "hull" (convex hull) or "trimesh" (concave trimesh). .. rst-class:: classref-item-separator diff --git a/classes/class_gltfskeleton.rst b/classes/class_gltfskeleton.rst index 9951dfc18aa..2c18ecaea1d 100644 --- a/classes/class_gltfskeleton.rst +++ b/classes/class_gltfskeleton.rst @@ -147,7 +147,7 @@ Method Descriptions :ref:`Dictionary` **get_godot_bone_node**\ (\ ) :ref:`🔗` -Returns a :ref:`Dictionary` that maps skeleton bone indices to the indices of GLTF nodes. This property is unused during import, and only set during export. In a GLTF file, a bone is a node, so Godot converts skeleton bones to GLTF nodes. +Returns a :ref:`Dictionary` that maps skeleton bone indices to the indices of glTF nodes. This property is unused during import, and only set during export. In a glTF file, a bone is a node, so Godot converts skeleton bones to glTF nodes. .. rst-class:: classref-item-separator @@ -187,7 +187,7 @@ Returns a :ref:`Dictionary` that maps skeleton bone indices to |void| **set_godot_bone_node**\ (\ godot_bone_node\: :ref:`Dictionary`\ ) :ref:`🔗` -Sets a :ref:`Dictionary` that maps skeleton bone indices to the indices of GLTF nodes. This property is unused during import, and only set during export. In a GLTF file, a bone is a node, so Godot converts skeleton bones to GLTF nodes. +Sets a :ref:`Dictionary` that maps skeleton bone indices to the indices of glTF nodes. This property is unused during import, and only set during export. In a glTF file, a bone is a node, so Godot converts skeleton bones to glTF nodes. .. rst-class:: classref-item-separator diff --git a/classes/class_gltfspecgloss.rst b/classes/class_gltfspecgloss.rst index a5cb4f2d997..0cc58a899d4 100644 --- a/classes/class_gltfspecgloss.rst +++ b/classes/class_gltfspecgloss.rst @@ -12,14 +12,14 @@ GLTFSpecGloss **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Archived GLTF extension for specular/glossy materials. +Archived glTF extension for specular/glossy materials. .. rst-class:: classref-introduction-group Description ----------- -KHR_materials_pbrSpecularGlossiness is an archived GLTF extension. This means that it is deprecated and not recommended for new files. However, it is still supported for loading old files. +KHR_materials_pbrSpecularGlossiness is an archived glTF extension. This means that it is deprecated and not recommended for new files. However, it is still supported for loading old files. .. rst-class:: classref-introduction-group @@ -28,7 +28,7 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `KHR_materials_pbrSpecularGlossiness GLTF extension spec `__ +- `KHR_materials_pbrSpecularGlossiness glTF extension spec `__ .. rst-class:: classref-reftable-group diff --git a/classes/class_gltfstate.rst b/classes/class_gltfstate.rst index 9faaf6c653d..2cc29142e42 100644 --- a/classes/class_gltfstate.rst +++ b/classes/class_gltfstate.rst @@ -14,16 +14,16 @@ GLTFState **Inherited By:** :ref:`FBXState` -Represents all data of a GLTF file. +Represents all data of a glTF file. .. rst-class:: classref-introduction-group Description ----------- -Contains all nodes and resources of a GLTF file. This is used by :ref:`GLTFDocument` as data storage, which allows :ref:`GLTFDocument` and all :ref:`GLTFDocumentExtension` classes to remain stateless. +Contains all nodes and resources of a glTF file. This is used by :ref:`GLTFDocument` as data storage, which allows :ref:`GLTFDocument` and all :ref:`GLTFDocumentExtension` classes to remain stateless. -GLTFState can be populated by :ref:`GLTFDocument` reading a file or by converting a Godot scene. Then the data can either be used to create a Godot scene or save to a GLTF file. The code that converts to/from a Godot scene can be intercepted at arbitrary points by :ref:`GLTFDocumentExtension` classes. This allows for custom data to be stored in the GLTF file or for custom data to be converted to/from Godot nodes. +GLTFState can be populated by :ref:`GLTFDocument` reading a file or by converting a Godot scene. Then the data can either be used to create a Godot scene or save to a glTF file. The code that converts to/from a Godot scene can be intercepted at arbitrary points by :ref:`GLTFDocumentExtension` classes. This allows for custom data to be stored in the glTF file or for custom data to be converted to/from Godot nodes. .. rst-class:: classref-introduction-group @@ -32,7 +32,7 @@ Tutorials - :doc:`Runtime file loading and saving <../tutorials/io/runtime_file_loading_and_saving>` -- `GLTF asset header schema `__ +- `glTF asset header schema `__ .. rst-class:: classref-reftable-group @@ -240,7 +240,7 @@ The baking fps of the animation for either import or export. - |void| **set_base_path**\ (\ value\: :ref:`String`\ ) - :ref:`String` **get_base_path**\ (\ ) -The folder path associated with this GLTF data. This is used to find other files the GLTF file references, like images or binary buffers. This will be set during import when appending from a file, and will be set during export when writing to a file. +The folder path associated with this glTF data. This is used to find other files the glTF file references, like images or binary buffers. This will be set during import when appending from a file, and will be set during export when writing to a file. .. rst-class:: classref-item-separator @@ -276,7 +276,7 @@ The folder path associated with this GLTF data. This is used to find other files - |void| **set_copyright**\ (\ value\: :ref:`String`\ ) - :ref:`String` **get_copyright**\ (\ ) -The copyright string in the asset header of the GLTF file. This is set during import if present and export if non-empty. See the GLTF asset header documentation for more information. +The copyright string in the asset header of the glTF file. This is set during import if present and export if non-empty. See the glTF asset header documentation for more information. .. rst-class:: classref-item-separator @@ -312,7 +312,7 @@ The copyright string in the asset header of the GLTF file. This is set during im - |void| **set_filename**\ (\ value\: :ref:`String`\ ) - :ref:`String` **get_filename**\ (\ ) -The file name associated with this GLTF data. If it ends with ``.gltf``, this is text-based GLTF, otherwise this is binary GLB. This will be set during import when appending from a file, and will be set during export when writing to a file. If writing to a buffer, this will be an empty string. +The file name associated with this glTF data. If it ends with ``.gltf``, this is text-based glTF, otherwise this is binary GLB. This will be set during import when appending from a file, and will be set during export when writing to a file. If writing to a buffer, this will be an empty string. .. rst-class:: classref-item-separator @@ -420,7 +420,7 @@ The original raw JSON document corresponding to this GLTFState. - |void| **set_root_nodes**\ (\ value\: :ref:`PackedInt32Array`\ ) - :ref:`PackedInt32Array` **get_root_nodes**\ (\ ) -The root nodes of the GLTF file. Typically, a GLTF file will only have one scene, and therefore one root node. However, a GLTF file may have multiple scenes and therefore multiple root nodes, which will be generated as siblings of each other and as children of the root node of the generated Godot scene. +The root nodes of the glTF file. Typically, a glTF file will only have one scene, and therefore one root node. However, a glTF file may have multiple scenes and therefore multiple root nodes, which will be generated as siblings of each other and as children of the root node of the generated Godot scene. **Note:** The returned array is *copied* and any changes to it will not update the original property value. See :ref:`PackedInt32Array` for more details. @@ -439,7 +439,7 @@ The root nodes of the GLTF file. Typically, a GLTF file will only have one scene - |void| **set_scene_name**\ (\ value\: :ref:`String`\ ) - :ref:`String` **get_scene_name**\ (\ ) -The name of the scene. When importing, if not specified, this will be the file name. When exporting, if specified, the scene name will be saved to the GLTF file. +The name of the scene. When importing, if not specified, this will be the file name. When exporting, if specified, the scene name will be saved to the glTF file. .. rst-class:: classref-item-separator @@ -475,7 +475,7 @@ Method Descriptions |void| **add_used_extension**\ (\ extension_name\: :ref:`String`, required\: :ref:`bool`\ ) :ref:`🔗` -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`, as that stage is too late to add extensions. The final list is sorted alphabetically. +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`, as that stage is too late to add extensions. The final list is sorted alphabetically. .. rst-class:: classref-item-separator @@ -515,7 +515,7 @@ Appends the given byte array data to the buffers and creates a :ref:`GLTFBufferV Gets additional arbitrary data in this **GLTFState** instance. This can be used to keep per-file state data in :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the return value can be anything you set. If nothing was set, the return value is null. +The argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the return value can be anything you set. If nothing was set, the return value is null. .. rst-class:: classref-item-separator @@ -527,7 +527,7 @@ The argument should be the :ref:`GLTFDocumentExtension` **get_animation_player**\ (\ idx\: :ref:`int`\ ) :ref:`🔗` -Returns the :ref:`AnimationPlayer` node with the given index. These nodes are only used during the export process when converting Godot :ref:`AnimationPlayer` nodes to GLTF animations. +Returns the :ref:`AnimationPlayer` node with the given index. These nodes are only used during the export process when converting Godot :ref:`AnimationPlayer` nodes to glTF animations. .. rst-class:: classref-item-separator @@ -539,7 +539,7 @@ Returns the :ref:`AnimationPlayer` node with the given in :ref:`int` **get_animation_players_count**\ (\ idx\: :ref:`int`\ ) :ref:`🔗` -Returns the number of :ref:`AnimationPlayer` nodes in this **GLTFState**. These nodes are only used during the export process when converting Godot :ref:`AnimationPlayer` nodes to GLTF animations. +Returns the number of :ref:`AnimationPlayer` nodes in this **GLTFState**. These nodes are only used during the export process when converting Godot :ref:`AnimationPlayer` nodes to glTF animations. .. rst-class:: classref-item-separator @@ -551,7 +551,7 @@ Returns the number of :ref:`AnimationPlayer` nodes in thi :ref:`Array`\[:ref:`GLTFAnimation`\] **get_animations**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFAnimation`\ s in the GLTF file. When importing, these will be generated as animations in an :ref:`AnimationPlayer` node. When exporting, these will be generated from Godot :ref:`AnimationPlayer` nodes. +Returns an array of all :ref:`GLTFAnimation`\ s in the glTF file. When importing, these will be generated as animations in an :ref:`AnimationPlayer` node. When exporting, these will be generated from Godot :ref:`AnimationPlayer` nodes. .. rst-class:: classref-item-separator @@ -577,7 +577,7 @@ Returns an array of all :ref:`GLTFAnimation`\ s in the GLTF :ref:`Array`\[:ref:`GLTFCamera`\] **get_cameras**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFCamera`\ s in the GLTF file. These are the cameras that the :ref:`GLTFNode.camera` index refers to. +Returns an array of all :ref:`GLTFCamera`\ s in the glTF file. These are the cameras that the :ref:`GLTFNode.camera` index refers to. .. rst-class:: classref-item-separator @@ -603,7 +603,7 @@ Returns an array of all :ref:`GLTFCamera`\ s in the GLTF file. :ref:`Array`\[:ref:`Texture2D`\] **get_images**\ (\ ) :ref:`🔗` -Gets the images of the GLTF file as an array of :ref:`Texture2D`\ s. These are the images that the :ref:`GLTFTexture.src_image` index refers to. +Gets the images of the glTF file as an array of :ref:`Texture2D`\ s. These are the images that the :ref:`GLTFTexture.src_image` index refers to. .. rst-class:: classref-item-separator @@ -615,7 +615,7 @@ Gets the images of the GLTF file as an array of :ref:`Texture2D :ref:`Array`\[:ref:`GLTFLight`\] **get_lights**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFLight`\ s in the GLTF file. These are the lights that the :ref:`GLTFNode.light` index refers to. +Returns an array of all :ref:`GLTFLight`\ s in the glTF file. These are the lights that the :ref:`GLTFNode.light` index refers to. .. rst-class:: classref-item-separator @@ -641,7 +641,7 @@ Returns an array of all :ref:`GLTFLight`\ s in the GLTF file. T :ref:`Array`\[:ref:`GLTFMesh`\] **get_meshes**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFMesh`\ es in the GLTF file. These are the meshes that the :ref:`GLTFNode.mesh` index refers to. +Returns an array of all :ref:`GLTFMesh`\ es in the glTF file. These are the meshes that the :ref:`GLTFNode.mesh` index refers to. .. rst-class:: classref-item-separator @@ -667,7 +667,7 @@ Returns the index of the :ref:`GLTFNode` corresponding to this G :ref:`Array`\[:ref:`GLTFNode`\] **get_nodes**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFNode`\ s in the GLTF file. These are the nodes that :ref:`GLTFNode.children` and :ref:`root_nodes` refer to. This includes nodes that may not be generated in the Godot scene, or nodes that may generate multiple Godot scene nodes. +Returns an array of all :ref:`GLTFNode`\ s in the glTF file. These are the nodes that :ref:`GLTFNode.children` and :ref:`root_nodes` refer to. This includes nodes that may not be generated in the Godot scene, or nodes that may generate multiple Godot scene nodes. .. rst-class:: classref-item-separator @@ -693,7 +693,7 @@ Returns the Godot scene node that corresponds to the same index as the :ref:`GLT :ref:`Array`\[:ref:`GLTFSkeleton`\] **get_skeletons**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFSkeleton`\ s in the GLTF file. These are the skeletons that the :ref:`GLTFNode.skeleton` index refers to. +Returns an array of all :ref:`GLTFSkeleton`\ s in the glTF file. These are the skeletons that the :ref:`GLTFNode.skeleton` index refers to. .. rst-class:: classref-item-separator @@ -705,7 +705,7 @@ Returns an array of all :ref:`GLTFSkeleton`\ s in the GLTF f :ref:`Array`\[:ref:`GLTFSkin`\] **get_skins**\ (\ ) :ref:`🔗` -Returns an array of all :ref:`GLTFSkin`\ s in the GLTF file. These are the skins that the :ref:`GLTFNode.skin` index refers to. +Returns an array of all :ref:`GLTFSkin`\ s in the glTF file. These are the skins that the :ref:`GLTFNode.skin` index refers to. .. rst-class:: classref-item-separator @@ -717,7 +717,7 @@ Returns an array of all :ref:`GLTFSkin`\ s in the GLTF file. The :ref:`Array`\[:ref:`GLTFTextureSampler`\] **get_texture_samplers**\ (\ ) :ref:`🔗` -Retrieves the array of texture samplers that are used by the textures contained in the GLTF. +Retrieves the array of texture samplers that are used by the textures contained in the glTF. .. rst-class:: classref-item-separator @@ -783,7 +783,7 @@ Returns an array of unique node names. This is used in both the import process a Sets additional arbitrary data in this **GLTFState** instance. This can be used to keep per-file state data in :ref:`GLTFDocumentExtension` classes, which is important because they are stateless. -The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the GLTF file), and the second argument can be anything you want. +The first argument should be the :ref:`GLTFDocumentExtension` name (does not have to match the extension name in the glTF file), and the second argument can be anything you want. .. rst-class:: classref-item-separator @@ -933,7 +933,7 @@ Sets the :ref:`GLTFSkin`\ s in the state. These are the skins th |void| **set_texture_samplers**\ (\ texture_samplers\: :ref:`Array`\[:ref:`GLTFTextureSampler`\]\ ) :ref:`🔗` -Sets the array of texture samplers that are used by the textures contained in the GLTF. +Sets the array of texture samplers that are used by the textures contained in the glTF. .. rst-class:: classref-item-separator diff --git a/classes/class_gltftexture.rst b/classes/class_gltftexture.rst index 187d5364509..5dff769778a 100644 --- a/classes/class_gltftexture.rst +++ b/classes/class_gltftexture.rst @@ -12,7 +12,7 @@ GLTFTexture **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -GLTFTexture represents a texture in a GLTF file. +GLTFTexture represents a texture in a glTF file. .. rst-class:: classref-introduction-group diff --git a/classes/class_gltftexturesampler.rst b/classes/class_gltftexturesampler.rst index dad254a2c83..9e120d012d1 100644 --- a/classes/class_gltftexturesampler.rst +++ b/classes/class_gltftexturesampler.rst @@ -12,14 +12,14 @@ GLTFTextureSampler **Inherits:** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` -Represents a GLTF texture sampler +Represents a glTF texture sampler .. rst-class:: classref-introduction-group 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. +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. .. rst-class:: classref-introduction-group diff --git a/classes/class_multiplayerspawner.rst b/classes/class_multiplayerspawner.rst index 557d860fb72..d2d78757a08 100644 --- a/classes/class_multiplayerspawner.rst +++ b/classes/class_multiplayerspawner.rst @@ -113,7 +113,7 @@ Property Descriptions - |void| **set_spawn_function**\ (\ value\: :ref:`Callable`\ ) - :ref:`Callable` **get_spawn_function**\ (\ ) -Method called on all peers when for every custom :ref:`spawn` requested by the authority. Will receive the ``data`` parameter, and should return a :ref:`Node` that is not in the scene tree. +Method called on all peers when a custom :ref:`spawn` is requested by the authority. Will receive the ``data`` parameter, and should return a :ref:`Node` that is not in the scene tree. \ **Note:** The returned node should **not** be added to the scene with :ref:`Node.add_child`. This is done automatically. @@ -132,7 +132,7 @@ Method called on all peers when for every custom :ref:`spawn`\ ) - :ref:`int` **get_spawn_limit**\ (\ ) -Maximum nodes that is allowed to be spawned by this spawner. Includes both spawnable scenes and custom spawns. +Maximum number of nodes allowed to be spawned by this spawner. Includes both spawnable scenes and custom spawns. When set to ``0`` (the default), there is no limit. diff --git a/classes/class_navigationlink2d.rst b/classes/class_navigationlink2d.rst index ee524d16615..ee45e15a15b 100644 --- a/classes/class_navigationlink2d.rst +++ b/classes/class_navigationlink2d.rst @@ -69,6 +69,8 @@ Methods +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`get_navigation_layer_value`\ (\ layer_number\: :ref:`int`\ ) |const| | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`RID` | :ref:`get_navigation_map`\ (\ ) |const| | + +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`RID` | :ref:`get_rid`\ (\ ) |const| | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_global_end_position`\ (\ position\: :ref:`Vector2`\ ) | @@ -77,6 +79,8 @@ Methods +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_navigation_layer_value`\ (\ layer_number\: :ref:`int`, value\: :ref:`bool`\ ) | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | |void| | :ref:`set_navigation_map`\ (\ navigation_map\: :ref:`RID`\ ) | + +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator @@ -255,6 +259,18 @@ Returns whether or not the specified layer of the :ref:`navigation_layers` **get_navigation_map**\ (\ ) |const| :ref:`🔗` + +Returns the current navigation map :ref:`RID` used by this link. + +.. rst-class:: classref-item-separator + +---- + .. _class_NavigationLink2D_method_get_rid: .. rst-class:: classref-method @@ -299,6 +315,18 @@ Sets the :ref:`start_position` t Based on ``value``, enables or disables the specified layer in the :ref:`navigation_layers` bitmask, given a ``layer_number`` between 1 and 32. +.. rst-class:: classref-item-separator + +---- + +.. _class_NavigationLink2D_method_set_navigation_map: + +.. rst-class:: classref-method + +|void| **set_navigation_map**\ (\ navigation_map\: :ref:`RID`\ ) :ref:`🔗` + +Sets the :ref:`RID` of the navigation map this link should use. By default the link will automatically join the :ref:`World2D` default navigation map so this function is only required to override the default map. + .. |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_navigationlink3d.rst b/classes/class_navigationlink3d.rst index 11a90a70ecd..698f0dff394 100644 --- a/classes/class_navigationlink3d.rst +++ b/classes/class_navigationlink3d.rst @@ -69,6 +69,8 @@ Methods +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`get_navigation_layer_value`\ (\ layer_number\: :ref:`int`\ ) |const| | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`RID` | :ref:`get_navigation_map`\ (\ ) |const| | + +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`RID` | :ref:`get_rid`\ (\ ) |const| | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_global_end_position`\ (\ position\: :ref:`Vector3`\ ) | @@ -77,6 +79,8 @@ Methods +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_navigation_layer_value`\ (\ layer_number\: :ref:`int`, value\: :ref:`bool`\ ) | +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | |void| | :ref:`set_navigation_map`\ (\ navigation_map\: :ref:`RID`\ ) | + +-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator @@ -255,6 +259,18 @@ Returns whether or not the specified layer of the :ref:`navigation_layers` **get_navigation_map**\ (\ ) |const| :ref:`🔗` + +Returns the current navigation map :ref:`RID` used by this link. + +.. rst-class:: classref-item-separator + +---- + .. _class_NavigationLink3D_method_get_rid: .. rst-class:: classref-method @@ -299,6 +315,18 @@ Sets the :ref:`start_position` t Based on ``value``, enables or disables the specified layer in the :ref:`navigation_layers` bitmask, given a ``layer_number`` between 1 and 32. +.. rst-class:: classref-item-separator + +---- + +.. _class_NavigationLink3D_method_set_navigation_map: + +.. rst-class:: classref-method + +|void| **set_navigation_map**\ (\ navigation_map\: :ref:`RID`\ ) :ref:`🔗` + +Sets the :ref:`RID` of the navigation map this link should use. By default the link will automatically join the :ref:`World3D` default navigation map so this function is only required to override the default map. + .. |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_navigationserver3d.rst b/classes/class_navigationserver3d.rst index 370ebd0bf5e..d6462951ddb 100644 --- a/classes/class_navigationserver3d.rst +++ b/classes/class_navigationserver3d.rst @@ -472,6 +472,14 @@ Constant to get the number of navigation mesh polygon edges that are considered Constant to get the number of navigation mesh polygon edges that could not be merged but may be still connected by edge proximity or with links. +.. _class_NavigationServer3D_constant_INFO_OBSTACLE_COUNT: + +.. rst-class:: classref-enumeration-constant + +:ref:`ProcessInfo` **INFO_OBSTACLE_COUNT** = ``9`` + +Constant to get the number of active navigation obstacles. + .. rst-class:: classref-section-separator ---- diff --git a/classes/class_node3d.rst b/classes/class_node3d.rst index f8a6153a0cc..2f1eea7f782 100644 --- a/classes/class_node3d.rst +++ b/classes/class_node3d.rst @@ -101,6 +101,8 @@ Methods +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array`\[:ref:`Node3DGizmo`\] | :ref:`get_gizmos`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`Transform3D` | :ref:`get_global_transform_interpolated`\ (\ ) | + +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Node3D` | :ref:`get_parent_node_3d`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`World3D` | :ref:`get_world_3d`\ (\ ) |const| | @@ -648,6 +650,22 @@ Returns all the gizmos attached to this **Node3D**. ---- +.. _class_Node3D_method_get_global_transform_interpolated: + +.. rst-class:: classref-method + +:ref:`Transform3D` **get_global_transform_interpolated**\ (\ ) :ref:`🔗` + +When using physics interpolation, there will be circumstances in which you want to know the interpolated (displayed) transform of a node rather than the standard transform (which may only be accurate to the most recent physics tick). + +This is particularly important for frame-based operations that take place in :ref:`Node._process`, rather than :ref:`Node._physics_process`. Examples include :ref:`Camera3D`\ s focusing on a node, or finding where to fire lasers from on a frame rather than physics tick. + +\ **Note:** This function creates an interpolation pump on the **Node3D** the first time it is called, which can respond to physics interpolation resets. If you get problems with "streaking" when initially following a **Node3D**, be sure to call :ref:`get_global_transform_interpolated` at least once *before* resetting the **Node3D** physics interpolation. + +.. rst-class:: classref-item-separator + +---- + .. _class_Node3D_method_get_parent_node_3d: .. rst-class:: classref-method diff --git a/classes/class_performance.rst b/classes/class_performance.rst index 8928c4e8237..f66d110dc04 100644 --- a/classes/class_performance.rst +++ b/classes/class_performance.rst @@ -332,11 +332,19 @@ Number of polygon edges that are considered connected by edge proximity :ref:`Na Number of navigation mesh polygon edges that could not be merged in the :ref:`NavigationServer3D`. The edges still may be connected by edge proximity or with links. +.. _class_Performance_constant_NAVIGATION_OBSTACLE_COUNT: + +.. rst-class:: classref-enumeration-constant + +:ref:`Monitor` **NAVIGATION_OBSTACLE_COUNT** = ``33`` + +Number of active navigation obstacles in the :ref:`NavigationServer3D`. + .. _class_Performance_constant_MONITOR_MAX: .. rst-class:: classref-enumeration-constant -:ref:`Monitor` **MONITOR_MAX** = ``33`` +:ref:`Monitor` **MONITOR_MAX** = ``34`` Represents the size of the :ref:`Monitor` enum. diff --git a/classes/class_polygon2d.rst b/classes/class_polygon2d.rst index 3ccc0cef189..ebcae4cf138 100644 --- a/classes/class_polygon2d.rst +++ b/classes/class_polygon2d.rst @@ -32,8 +32,6 @@ Properties +-----------------------------------------------------+------------------------------------------------------------------------------+--------------------------+ | :ref:`bool` | :ref:`antialiased` | ``false`` | +-----------------------------------------------------+------------------------------------------------------------------------------+--------------------------+ - | :ref:`Array` | :ref:`bones` | ``[]`` | - +-----------------------------------------------------+------------------------------------------------------------------------------+--------------------------+ | :ref:`Color` | :ref:`color` | ``Color(1, 1, 1, 1)`` | +-----------------------------------------------------+------------------------------------------------------------------------------+--------------------------+ | :ref:`int` | :ref:`internal_vertex_count` | ``0`` | @@ -115,18 +113,6 @@ If ``true``, polygon edges will be anti-aliased. ---- -.. _class_Polygon2D_property_bones: - -.. rst-class:: classref-property - -:ref:`Array` **bones** = ``[]`` :ref:`🔗` - -Internal list of :ref:`Bone2D` nodes used by the assigned :ref:`skeleton`. Edited using the Polygon2D editor ("UV" button on the top toolbar). - -.. rst-class:: classref-item-separator - ----- - .. _class_Polygon2D_property_color: .. rst-class:: classref-property diff --git a/classes/class_projectsettings.rst b/classes/class_projectsettings.rst index 0ff76597b42..4a90c4ecf73 100644 --- a/classes/class_projectsettings.rst +++ b/classes/class_projectsettings.rst @@ -277,6 +277,8 @@ Properties +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/settings/gdscript/max_call_stack` | ``1024`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`debug/settings/physics_interpolation/enable_warnings` | ``true`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/settings/profiler/max_functions` | ``16384`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`debug/settings/profiler/max_timestamp_query_elements` | ``256`` | @@ -493,7 +495,7 @@ Properties +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`editor/run/main_run_args` | ``""`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ - | :ref:`PackedStringArray` | :ref:`editor/script/search_in_file_extensions` | ``PackedStringArray("gd", "gdshader")`` | + | :ref:`PackedStringArray` | :ref:`editor/script/search_in_file_extensions` | | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`editor/script/templates_search_path` | ``"res://script_templates"`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ @@ -723,6 +725,14 @@ Properties +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`input_devices/pointing/emulate_touch_from_mouse` | ``false`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`input_devices/sensors/enable_accelerometer` | ``false`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`input_devices/sensors/enable_gravity` | ``false`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`input_devices/sensors/enable_gyroscope` | ``false`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`input_devices/sensors/enable_magnetometer` | ``false`` | + +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`internationalization/locale/fallback` | ``"en"`` | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`internationalization/locale/include_text_server_data` | ``false`` | @@ -3188,6 +3198,20 @@ Maximum call stack allowed for debugging GDScript. ---- +.. _class_ProjectSettings_property_debug/settings/physics_interpolation/enable_warnings: + +.. rst-class:: classref-property + +:ref:`bool` **debug/settings/physics_interpolation/enable_warnings** = ``true`` :ref:`🔗` + +If ``true``, enables warnings which can help pinpoint where nodes are being incorrectly updated, which will result in incorrect interpolation and visual glitches. + +When a node is being interpolated, it is essential that the transform is set during :ref:`Node._physics_process` (during a physics tick) rather than :ref:`Node._process` (during a frame). + +.. rst-class:: classref-item-separator + +---- + .. _class_ProjectSettings_property_debug/settings/profiler/max_functions: .. rst-class:: classref-property @@ -4586,7 +4610,7 @@ For example, this can be used to force the project to run on the dedicated GPU i .. rst-class:: classref-property -:ref:`PackedStringArray` **editor/script/search_in_file_extensions** = ``PackedStringArray("gd", "gdshader")`` :ref:`🔗` +:ref:`PackedStringArray` **editor/script/search_in_file_extensions** :ref:`🔗` Text-based file extensions to include in the script editor's "Find in Files" feature. You can add e.g. ``tscn`` if you wish to also parse your scene files, especially if you use built-in scripts which are serialized in the scene files. @@ -6134,6 +6158,54 @@ If ``true``, sends touch input events when clicking or dragging the mouse. ---- +.. _class_ProjectSettings_property_input_devices/sensors/enable_accelerometer: + +.. rst-class:: classref-property + +:ref:`bool` **input_devices/sensors/enable_accelerometer** = ``false`` :ref:`🔗` + +If ``true``, the accelerometer sensor is enabled and :ref:`Input.get_accelerometer` returns valid data. + +.. rst-class:: classref-item-separator + +---- + +.. _class_ProjectSettings_property_input_devices/sensors/enable_gravity: + +.. rst-class:: classref-property + +:ref:`bool` **input_devices/sensors/enable_gravity** = ``false`` :ref:`🔗` + +If ``true``, the gravity sensor is enabled and :ref:`Input.get_gravity` returns valid data. + +.. rst-class:: classref-item-separator + +---- + +.. _class_ProjectSettings_property_input_devices/sensors/enable_gyroscope: + +.. rst-class:: classref-property + +:ref:`bool` **input_devices/sensors/enable_gyroscope** = ``false`` :ref:`🔗` + +If ``true``, the gyroscope sensor is enabled and :ref:`Input.get_gyroscope` returns valid data. + +.. rst-class:: classref-item-separator + +---- + +.. _class_ProjectSettings_property_input_devices/sensors/enable_magnetometer: + +.. rst-class:: classref-property + +:ref:`bool` **input_devices/sensors/enable_magnetometer** = ``false`` :ref:`🔗` + +If ``true``, the magnetometer sensor is enabled and :ref:`Input.get_magnetometer` returns valid data. + +.. rst-class:: classref-item-separator + +---- + .. _class_ProjectSettings_property_internationalization/locale/fallback: .. rst-class:: classref-property @@ -9552,7 +9624,9 @@ If ``true``, the renderer will interpolate the transforms of physics objects bet Controls how much physics ticks are synchronized with real time. For 0 or less, the ticks are synchronized. Such values are recommended for network games, where clock synchronization matters. Higher values cause higher deviation of in-game clock and real clock, but allows smoothing out framerate jitters. The default value of 0.5 should be good enough for most; values above 2 could cause the game to react to dropped frames with a noticeable delay and are not recommended. -\ **Note:** When using a physics interpolation solution (such as enabling :ref:`physics/common/physics_interpolation` or using a custom solution), the physics jitter fix should be disabled by setting :ref:`physics/common/physics_jitter_fix` to ``0.0``. +\ **Note:** Jitter fix is automatically disabled at runtime when :ref:`physics/common/physics_interpolation` is enabled. + +\ **Note:** When using a custom physics interpolation solution, the physics jitter fix should be disabled by setting :ref:`physics/common/physics_jitter_fix` to ``0.0``. \ **Note:** This property is only read when the project starts. To change the physics jitter fix at runtime, set :ref:`Engine.physics_jitter_fix` instead. diff --git a/classes/class_renderingserver.rst b/classes/class_renderingserver.rst index 21fd6d7b8fc..846bf547ba0 100644 --- a/classes/class_renderingserver.rst +++ b/classes/class_renderingserver.rst @@ -477,6 +477,8 @@ Methods +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`instance_geometry_set_visibility_range`\ (\ instance\: :ref:`RID`, min\: :ref:`float`, max\: :ref:`float`, min_margin\: :ref:`float`, max_margin\: :ref:`float`, fade_mode\: :ref:`VisibilityRangeFadeMode`\ ) | +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | |void| | :ref:`instance_reset_physics_interpolation`\ (\ instance\: :ref:`RID`\ ) | + +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`instance_set_base`\ (\ instance\: :ref:`RID`, base\: :ref:`RID`\ ) | +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`instance_set_blend_shape_weight`\ (\ instance\: :ref:`RID`, shape\: :ref:`int`, weight\: :ref:`float`\ ) | @@ -487,6 +489,8 @@ Methods +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`instance_set_ignore_culling`\ (\ instance\: :ref:`RID`, enabled\: :ref:`bool`\ ) | +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | |void| | :ref:`instance_set_interpolated`\ (\ instance\: :ref:`RID`, interpolated\: :ref:`bool`\ ) | + +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`instance_set_layer_mask`\ (\ instance\: :ref:`RID`, mask\: :ref:`int`\ ) | +----------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`instance_set_pivot_data`\ (\ instance\: :ref:`RID`, sorting_offset\: :ref:`float`, use_aabb_center\: :ref:`bool`\ ) | @@ -8432,6 +8436,20 @@ Sets the visibility range values for the given geometry instance. Equivalent to ---- +.. _class_RenderingServer_method_instance_reset_physics_interpolation: + +.. rst-class:: classref-method + +|void| **instance_reset_physics_interpolation**\ (\ instance\: :ref:`RID`\ ) :ref:`🔗` + +Prevents physics interpolation for the current physics tick. + +This is useful when moving an instance to a new location, to give an instantaneous change rather than interpolation from the previous location. + +.. rst-class:: classref-item-separator + +---- + .. _class_RenderingServer_method_instance_set_base: .. rst-class:: classref-method @@ -8492,6 +8510,18 @@ If ``true``, ignores both frustum and occlusion culling on the specified 3D geom ---- +.. _class_RenderingServer_method_instance_set_interpolated: + +.. rst-class:: classref-method + +|void| **instance_set_interpolated**\ (\ instance\: :ref:`RID`, interpolated\: :ref:`bool`\ ) :ref:`🔗` + +Turns on and off physics interpolation for the instance. + +.. rst-class:: classref-item-separator + +---- + .. _class_RenderingServer_method_instance_set_layer_mask: .. rst-class:: classref-method diff --git a/classes/class_resourceimporterdynamicfont.rst b/classes/class_resourceimporterdynamicfont.rst index c0388887f2e..9cacce548df 100644 --- a/classes/class_resourceimporterdynamicfont.rst +++ b/classes/class_resourceimporterdynamicfont.rst @@ -73,7 +73,7 @@ Properties +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------+-----------+ | :ref:`Dictionary` | :ref:`script_support` | ``{}`` | +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------+-----------+ - | :ref:`int` | :ref:`subpixel_positioning` | ``1`` | + | :ref:`int` | :ref:`subpixel_positioning` | ``4`` | +-------------------------------------+--------------------------------------------------------------------------------------------------------------------------+-----------+ .. rst-class:: classref-section-separator @@ -299,7 +299,7 @@ Override the list of language scripts supported by this font. If left empty, thi .. rst-class:: classref-property -:ref:`int` **subpixel_positioning** = ``1`` :ref:`🔗` +:ref:`int` **subpixel_positioning** = ``4`` :ref:`🔗` Subpixel positioning improves font rendering appearance, especially at smaller font sizes. The downside is that it takes more time to initially render the font, which can cause stuttering during gameplay, especially if used with large font sizes. This should be set to **Disabled** for fonts with a pixel art appearance. @@ -311,6 +311,8 @@ Subpixel positioning improves font rendering appearance, especially at smaller f \ **One Quarter of a Pixel:** Always perform precise subpixel positioning regardless of font size. Highest quality, slowest rendering. +\ **Auto (Except Pixel Fonts):** **Disabled** for the pixel style fonts (each glyph contours contain only straight horizontal and vertical lines), **Auto** for the other fonts. + .. |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_resourceimporterimagefont.rst b/classes/class_resourceimporterimagefont.rst index 989f5f61ffb..d6882106b0b 100644 --- a/classes/class_resourceimporterimagefont.rst +++ b/classes/class_resourceimporterimagefont.rst @@ -183,7 +183,7 @@ Margin to cut on the sides of the entire image. This can be used to cut parts of Kerning pairs for the font. Kerning pair adjust the spacing between two characters. -Each string consist of three space separated values: "from" string, "to" string and integer offset. Each combination form the two string for a kerning pair, e.g, ``ab cd -3`` will create kerning pairs ``ac``, ``ad``, ``bc``, and ``bd`` with offset ``-3``. +Each string consist of three space separated values: "from" string, "to" string and integer offset. Each combination form the two string for a kerning pair, e.g, ``ab cd -3`` will create kerning pairs ``ac``, ``ad``, ``bc``, and ``bd`` with offset ``-3``. ``\uXXXX`` escape sequences can be used to add Unicode characters. **Note:** The returned array is *copied* and any changes to it will not update the original property value. See :ref:`PackedStringArray` for more details. diff --git a/classes/class_resourceimporterobj.rst b/classes/class_resourceimporterobj.rst index db0de9ba1fd..cfc2b3127c6 100644 --- a/classes/class_resourceimporterobj.rst +++ b/classes/class_resourceimporterobj.rst @@ -45,8 +45,6 @@ Properties +-------------------------------+----------------------------------------------------------------------------------------------------------+----------------------+ | :ref:`Vector3` | :ref:`offset_mesh` | ``Vector3(0, 0, 0)`` | +-------------------------------+----------------------------------------------------------------------------------------------------------+----------------------+ - | :ref:`bool` | :ref:`optimize_mesh` | ``true`` | - +-------------------------------+----------------------------------------------------------------------------------------------------------+----------------------+ | :ref:`Vector3` | :ref:`scale_mesh` | ``Vector3(1, 1, 1)`` | +-------------------------------+----------------------------------------------------------------------------------------------------------+----------------------+ @@ -97,18 +95,6 @@ Offsets the mesh's data by the specified value. This can be used to work around ---- -.. _class_ResourceImporterOBJ_property_optimize_mesh: - -.. rst-class:: classref-property - -:ref:`bool` **optimize_mesh** = ``true`` :ref:`🔗` - -Unused parameter. This currently has no effect. - -.. rst-class:: classref-item-separator - ----- - .. _class_ResourceImporterOBJ_property_scale_mesh: .. rst-class:: classref-property diff --git a/classes/class_shapecast2d.rst b/classes/class_shapecast2d.rst index fefcbd4e2df..9fbcbe3b442 100644 --- a/classes/class_shapecast2d.rst +++ b/classes/class_shapecast2d.rst @@ -165,6 +165,10 @@ The shape's collision mask. Only objects in at least one collision layer enabled :ref:`Array` **collision_result** = ``[]`` :ref:`🔗` +.. rst-class:: classref-property-setget + +- :ref:`Array` **get_collision_result**\ (\ ) + Returns the complete collision information from the collision sweep. The data returned is the same as in the :ref:`PhysicsDirectSpaceState2D.get_rest_info` method. .. rst-class:: classref-item-separator diff --git a/classes/class_shapecast3d.rst b/classes/class_shapecast3d.rst index 09a71f904f8..f623b6ab763 100644 --- a/classes/class_shapecast3d.rst +++ b/classes/class_shapecast3d.rst @@ -169,6 +169,10 @@ The shape's collision mask. Only objects in at least one collision layer enabled :ref:`Array` **collision_result** = ``[]`` :ref:`🔗` +.. rst-class:: classref-property-setget + +- :ref:`Array` **get_collision_result**\ (\ ) + Returns the complete collision information from the collision sweep. The data returned is the same as in the :ref:`PhysicsDirectSpaceState3D.get_rest_info` method. .. rst-class:: classref-item-separator diff --git a/classes/class_textserver.rst b/classes/class_textserver.rst index 655d54c9d71..cd8c968acb0 100644 --- a/classes/class_textserver.rst +++ b/classes/class_textserver.rst @@ -157,6 +157,8 @@ Methods +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`font_get_supported_chars`\ (\ font_rid\: :ref:`RID`\ ) |const| | +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`PackedInt32Array` | :ref:`font_get_supported_glyphs`\ (\ font_rid\: :ref:`RID`\ ) |const| | + +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`font_get_texture_count`\ (\ font_rid\: :ref:`RID`, size\: :ref:`Vector2i`\ ) |const| | +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Image` | :ref:`font_get_texture_image`\ (\ font_rid\: :ref:`RID`, size\: :ref:`Vector2i`, texture_index\: :ref:`int`\ ) |const| | @@ -2250,6 +2252,18 @@ Returns a string containing all the characters available in the font. ---- +.. _class_TextServer_method_font_get_supported_glyphs: + +.. rst-class:: classref-method + +:ref:`PackedInt32Array` **font_get_supported_glyphs**\ (\ font_rid\: :ref:`RID`\ ) |const| :ref:`🔗` + +Returns an array containing all glyph indices in the font. + +.. rst-class:: classref-item-separator + +---- + .. _class_TextServer_method_font_get_texture_count: .. rst-class:: classref-method diff --git a/classes/class_textserverextension.rst b/classes/class_textserverextension.rst index 04c009aa4eb..45d910800d5 100644 --- a/classes/class_textserverextension.rst +++ b/classes/class_textserverextension.rst @@ -142,6 +142,8 @@ Methods +-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`_font_get_supported_chars`\ (\ font_rid\: :ref:`RID`\ ) |virtual| |const| | +-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`PackedInt32Array` | :ref:`_font_get_supported_glyphs`\ (\ font_rid\: :ref:`RID`\ ) |virtual| |const| | + +-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`_font_get_texture_count`\ (\ font_rid\: :ref:`RID`, size\: :ref:`Vector2i`\ ) |virtual| |const| | +-----------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Image` | :ref:`_font_get_texture_image`\ (\ font_rid\: :ref:`RID`, size\: :ref:`Vector2i`, texture_index\: :ref:`int`\ ) |virtual| |const| | @@ -1244,6 +1246,20 @@ Returns a string containing all the characters available in the font. ---- +.. _class_TextServerExtension_private_method__font_get_supported_glyphs: + +.. rst-class:: classref-method + +:ref:`PackedInt32Array` **_font_get_supported_glyphs**\ (\ font_rid\: :ref:`RID`\ ) |virtual| |const| :ref:`🔗` + +**Required.**\ + +Returns an array containing all glyph indices in the font. + +.. rst-class:: classref-item-separator + +---- + .. _class_TextServerExtension_private_method__font_get_texture_count: .. rst-class:: classref-method diff --git a/classes/class_tilemap.rst b/classes/class_tilemap.rst index 878c1b28d0b..c5afd5f3356 100644 --- a/classes/class_tilemap.rst +++ b/classes/class_tilemap.rst @@ -132,6 +132,12 @@ Methods +--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Rect2i` | :ref:`get_used_rect`\ (\ ) |const| | +--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_cell_flipped_h`\ (\ layer\: :ref:`int`, coords\: :ref:`Vector2i`, use_proxies\: :ref:`bool` = false\ ) |const| | + +--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_cell_flipped_v`\ (\ layer\: :ref:`int`, coords\: :ref:`Vector2i`, use_proxies\: :ref:`bool` = false\ ) |const| | + +--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_cell_transposed`\ (\ layer\: :ref:`int`, coords\: :ref:`Vector2i`, use_proxies\: :ref:`bool` = false\ ) |const| | + +--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_layer_enabled`\ (\ layer\: :ref:`int`\ ) |const| | +--------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_layer_navigation_enabled`\ (\ layer\: :ref:`int`\ ) |const| | @@ -732,6 +738,42 @@ Returns a rectangle enclosing the used (non-empty) tiles of the map, including a ---- +.. _class_TileMap_method_is_cell_flipped_h: + +.. rst-class:: classref-method + +:ref:`bool` **is_cell_flipped_h**\ (\ layer\: :ref:`int`, coords\: :ref:`Vector2i`, use_proxies\: :ref:`bool` = false\ ) |const| :ref:`🔗` + +Returns ``true`` if the cell on layer ``layer`` at coordinates ``coords`` is flipped horizontally. The result is valid only for atlas sources. + +.. rst-class:: classref-item-separator + +---- + +.. _class_TileMap_method_is_cell_flipped_v: + +.. rst-class:: classref-method + +:ref:`bool` **is_cell_flipped_v**\ (\ layer\: :ref:`int`, coords\: :ref:`Vector2i`, use_proxies\: :ref:`bool` = false\ ) |const| :ref:`🔗` + +Returns ``true`` if the cell on layer ``layer`` at coordinates ``coords`` is flipped vertically. The result is valid only for atlas sources. + +.. rst-class:: classref-item-separator + +---- + +.. _class_TileMap_method_is_cell_transposed: + +.. rst-class:: classref-method + +:ref:`bool` **is_cell_transposed**\ (\ layer\: :ref:`int`, coords\: :ref:`Vector2i`, use_proxies\: :ref:`bool` = false\ ) |const| :ref:`🔗` + +Returns ``true`` if the cell on layer ``layer`` at coordinates ``coords`` is transposed. The result is valid only for atlas sources. + +.. rst-class:: classref-item-separator + +---- + .. _class_TileMap_method_is_layer_enabled: .. rst-class:: classref-method diff --git a/classes/class_tilemaplayer.rst b/classes/class_tilemaplayer.rst index 62145b9fa45..01eb6878870 100644 --- a/classes/class_tilemaplayer.rst +++ b/classes/class_tilemaplayer.rst @@ -102,6 +102,12 @@ Methods +--------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`has_body_rid`\ (\ body\: :ref:`RID`\ ) |const| | +--------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_cell_flipped_h`\ (\ coords\: :ref:`Vector2i`\ ) |const| | + +--------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_cell_flipped_v`\ (\ coords\: :ref:`Vector2i`\ ) |const| | + +--------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`is_cell_transposed`\ (\ coords\: :ref:`Vector2i`\ ) |const| | + +--------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector2i` | :ref:`local_to_map`\ (\ local_position\: :ref:`Vector2`\ ) |const| | +--------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector2i` | :ref:`map_pattern`\ (\ position_in_tilemap\: :ref:`Vector2i`, coords_in_pattern\: :ref:`Vector2i`, pattern\: :ref:`TileMapPattern`\ ) | @@ -630,6 +636,42 @@ Returns whether the provided ``body`` :ref:`RID` belongs to one of th ---- +.. _class_TileMapLayer_method_is_cell_flipped_h: + +.. rst-class:: classref-method + +:ref:`bool` **is_cell_flipped_h**\ (\ coords\: :ref:`Vector2i`\ ) |const| :ref:`🔗` + +Returns ``true`` if the cell at coordinates ``coords`` is flipped horizontally. The result is valid only for atlas sources. + +.. rst-class:: classref-item-separator + +---- + +.. _class_TileMapLayer_method_is_cell_flipped_v: + +.. rst-class:: classref-method + +:ref:`bool` **is_cell_flipped_v**\ (\ coords\: :ref:`Vector2i`\ ) |const| :ref:`🔗` + +Returns ``true`` if the cell at coordinates ``coords`` is flipped vertically. The result is valid only for atlas sources. + +.. rst-class:: classref-item-separator + +---- + +.. _class_TileMapLayer_method_is_cell_transposed: + +.. rst-class:: classref-method + +:ref:`bool` **is_cell_transposed**\ (\ coords\: :ref:`Vector2i`\ ) |const| :ref:`🔗` + +Returns ``true`` if the cell at coordinates ``coords`` is transposed. The result is valid only for atlas sources. + +.. rst-class:: classref-item-separator + +---- + .. _class_TileMapLayer_method_local_to_map: .. rst-class:: classref-method diff --git a/classes/class_timer.rst b/classes/class_timer.rst index fee0bdb49e2..0b0a08f8f1b 100644 --- a/classes/class_timer.rst +++ b/classes/class_timer.rst @@ -266,7 +266,7 @@ Returns ``true`` if the timer is stopped or has not started. |void| **start**\ (\ time_sec\: :ref:`float` = -1\ ) :ref:`🔗` -Starts the timer, if it was not started already. Fails if the timer is not inside the tree. If ``time_sec`` is greater than ``0``, this value is used for the :ref:`wait_time`. +Starts the timer, or resets the timer if it was started already. Fails if the timer is not inside the tree. If ``time_sec`` is greater than ``0``, this value is used for the :ref:`wait_time`. \ **Note:** This method does not resume a paused timer. See :ref:`paused`. diff --git a/classes/class_viewport.rst b/classes/class_viewport.rst index a49e66d7ff7..ba601bb6a7a 100644 --- a/classes/class_viewport.rst +++ b/classes/class_viewport.rst @@ -60,99 +60,101 @@ Properties .. table:: :widths: auto - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`audio_listener_enable_2d` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`audio_listener_enable_3d` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`int` | :ref:`canvas_cull_mask` | ``4294967295`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`DefaultCanvasItemTextureFilter` | :ref:`canvas_item_default_texture_filter` | ``1`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`DefaultCanvasItemTextureRepeat` | :ref:`canvas_item_default_texture_repeat` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`Transform2D` | :ref:`canvas_transform` | | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`DebugDraw` | :ref:`debug_draw` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`disable_3d` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`float` | :ref:`fsr_sharpness` | ``0.2`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`Transform2D` | :ref:`global_canvas_transform` | | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`gui_disable_input` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`gui_embed_subwindows` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`gui_snap_controls_to_pixels` | ``true`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`handle_input_locally` | ``true`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`float` | :ref:`mesh_lod_threshold` | ``1.0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`MSAA` | :ref:`msaa_2d` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`MSAA` | :ref:`msaa_3d` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`own_world_3d` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`physics_object_picking` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`physics_object_picking_first_only` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`physics_object_picking_sort` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`positional_shadow_atlas_16_bits` | ``true`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_0` | ``2`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_1` | ``2`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_2` | ``3`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_3` | ``4`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`int` | :ref:`positional_shadow_atlas_size` | ``2048`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`Scaling3DMode` | :ref:`scaling_3d_mode` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`float` | :ref:`scaling_3d_scale` | ``1.0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`ScreenSpaceAA` | :ref:`screen_space_aa` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`SDFOversize` | :ref:`sdf_oversize` | ``1`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`SDFScale` | :ref:`sdf_scale` | ``1`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`snap_2d_transforms_to_pixel` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`snap_2d_vertices_to_pixel` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`float` | :ref:`texture_mipmap_bias` | ``0.0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`transparent_bg` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`use_debanding` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`use_hdr_2d` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`use_occlusion_culling` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`use_taa` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`bool` | :ref:`use_xr` | ``false`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`VRSMode` | :ref:`vrs_mode` | ``0`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`Texture2D` | :ref:`vrs_texture` | | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`VRSUpdateMode` | :ref:`vrs_update_mode` | ``1`` | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`World2D` | :ref:`world_2d` | | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ - | :ref:`World3D` | :ref:`world_3d` | | - +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------+ + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`audio_listener_enable_2d` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`audio_listener_enable_3d` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`int` | :ref:`canvas_cull_mask` | ``4294967295`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`DefaultCanvasItemTextureFilter` | :ref:`canvas_item_default_texture_filter` | ``1`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`DefaultCanvasItemTextureRepeat` | :ref:`canvas_item_default_texture_repeat` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`Transform2D` | :ref:`canvas_transform` | | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`DebugDraw` | :ref:`debug_draw` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`disable_3d` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`float` | :ref:`fsr_sharpness` | ``0.2`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`Transform2D` | :ref:`global_canvas_transform` | | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`gui_disable_input` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`gui_embed_subwindows` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`gui_snap_controls_to_pixels` | ``true`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`handle_input_locally` | ``true`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`float` | :ref:`mesh_lod_threshold` | ``1.0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`MSAA` | :ref:`msaa_2d` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`MSAA` | :ref:`msaa_3d` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`own_world_3d` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`PhysicsInterpolationMode` | physics_interpolation_mode | ``1`` (overrides :ref:`Node`) | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`physics_object_picking` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`physics_object_picking_first_only` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`physics_object_picking_sort` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`positional_shadow_atlas_16_bits` | ``true`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_0` | ``2`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_1` | ``2`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_2` | ``3`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`PositionalShadowAtlasQuadrantSubdiv` | :ref:`positional_shadow_atlas_quad_3` | ``4`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`int` | :ref:`positional_shadow_atlas_size` | ``2048`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`Scaling3DMode` | :ref:`scaling_3d_mode` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`float` | :ref:`scaling_3d_scale` | ``1.0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`ScreenSpaceAA` | :ref:`screen_space_aa` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`SDFOversize` | :ref:`sdf_oversize` | ``1`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`SDFScale` | :ref:`sdf_scale` | ``1`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`snap_2d_transforms_to_pixel` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`snap_2d_vertices_to_pixel` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`float` | :ref:`texture_mipmap_bias` | ``0.0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`transparent_bg` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_debanding` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_hdr_2d` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_occlusion_culling` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_taa` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`bool` | :ref:`use_xr` | ``false`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`VRSMode` | :ref:`vrs_mode` | ``0`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`Texture2D` | :ref:`vrs_texture` | | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`VRSUpdateMode` | :ref:`vrs_update_mode` | ``1`` | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`World2D` | :ref:`world_2d` | | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ + | :ref:`World3D` | :ref:`world_3d` | | + +-----------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------+ .. rst-class:: classref-reftable-group From 0fe736bce838023be73374eb1143e30893d225fb Mon Sep 17 00:00:00 2001 From: Dark Star Date: Sat, 17 Aug 2024 20:08:56 +0200 Subject: [PATCH 21/99] Update 07.killing_player.rst Corrected grammar on line 141 --- getting_started/first_3d_game/07.killing_player.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_started/first_3d_game/07.killing_player.rst b/getting_started/first_3d_game/07.killing_player.rst index 74b22d246b1..92a0a65b88e 100644 --- a/getting_started/first_3d_game/07.killing_player.rst +++ b/getting_started/first_3d_game/07.killing_player.rst @@ -138,7 +138,7 @@ Also note that the enemy colliding with the player and dying depends on the size ``Player`` and the ``Mob``\ 's collision shapes. You may need to move them and resize them to achieve a tight game feel. -You can pat yourself in the back: you prototyped a complete 3D game, +You can pat yourself on the back: you prototyped a complete 3D game, even if it's still a bit rough. From there, we'll add a score, the option to retry the game, and you'll From 49a432d066bd1fcc92d47d0518026b3e000c6ffa Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sat, 17 Aug 2024 20:31:26 +0200 Subject: [PATCH 22/99] Fix Visual Studio Code gdb pretty print script path to match the Godot repository --- .../development/configuring_an_ide/visual_studio_code.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/development/configuring_an_ide/visual_studio_code.rst b/contributing/development/configuring_an_ide/visual_studio_code.rst index 919f7e04273..165b2a14b2e 100644 --- a/contributing/development/configuring_an_ide/visual_studio_code.rst +++ b/contributing/development/configuring_an_ide/visual_studio_code.rst @@ -115,7 +115,7 @@ To run and debug the project you need to create a new configuration in the ``lau }, { "description": "Load custom pretty-printers for Godot types.", - "text": "source ${workspaceRoot}/misc/scripts/godot_gdb_pretty_print.py" + "text": "source ${workspaceRoot}/misc/utility/godot_gdb_pretty_print.py" } ], "preLaunchTask": "build" From 124742666bd8b1377bd27060fd19a147cade3f51 Mon Sep 17 00:00:00 2001 From: Dark Star Date: Sat, 17 Aug 2024 21:51:17 +0200 Subject: [PATCH 23/99] Update 18_register_autoload.webp Correct menu layout --- .../18_register_autoload.webp | Bin 7132 -> 9262 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/getting_started/first_3d_game/img/08.score_and_replay/18_register_autoload.webp b/getting_started/first_3d_game/img/08.score_and_replay/18_register_autoload.webp index 6d5fa1b784c557c9957379b560854b451940bd49..4687d36e884d4fc34ee78c8077babfe4de0de64d 100644 GIT binary patch literal 9262 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 QVr5qW5C8@MS^xk500|TNK>z>% literal 7132 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 Date: Sat, 17 Aug 2024 22:16:10 +0200 Subject: [PATCH 24/99] Updated images to match docs Fixing issues/9775 --- tutorials/scripting/img/autoload_example.webp | Bin 20666 -> 17620 bytes tutorials/scripting/img/autoload_tab.webp | Bin 15482 -> 12322 bytes .../scripting/img/autoload_tutorial1.webp | Bin 14494 -> 8786 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tutorials/scripting/img/autoload_example.webp b/tutorials/scripting/img/autoload_example.webp index 0ab122861e09f04c2cc46247658fbdc1e564e795..47ab9829b58565ff646d61a8f13e20a1f4a31c99 100644 GIT binary patch literal 17620 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 diff --git a/tutorials/scripting/img/autoload_tab.webp b/tutorials/scripting/img/autoload_tab.webp index 2419ea54f03f734bfd2ea941f53aea10bc066b35..69bae3f19b9d9df1964996d1a0b75c58c6315e68 100644 GIT binary patch literal 12322 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

{C-eXUOMi1;HVq_}pJd2B; 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 literal 15482 zcmbVyW00lImTuX$ZChQoZFHAyb(vkZZC96V+paF#wrk(|&Np-COx!bPBJSQlcILBI zX0G)tyczLsWhrrSM_wQx4KZOwbww^B)3338AaE8ijTu-k2tPAcxF`v69#UAQF%c+O zL$fFE&u8M+B(L^{WDYE25=wO&ATJGe{?Kl-C*Zr3`IM(_iRhGUeF1sjHGtDo@#hJE z^&PS`X9=K>c;vhBq3(PBhUfbOfPW7BF7jGk^z-7XPvAn}lCdY|tOU@lk0|){)%Yy( z)xAJ{1w0Y{QQ!s;zEocj#&4~5n}1>p{Cw}Z3p)h#07?L;rxG{Qm0LcaS8qBWfXC%4 z$_v5`fl43ISG%k3XMqcXp6+;G^3U-Xqfg2wtM%>|!Uj7+Jiv$9E8vvBr>p&a_$}sH zU=8sa(3(Bm-R&FjG4{E5EwIpilasNv|JfrD=}QlQ{J45NdQSmN=XTElI&V5&w_bld z0*0RI!(DCC;0PqRw zOY!Ob>GY=Yvh^mg*A4JpeCvAvyoCXpH%K3zK0}U}P%RYO@D}NShA(X0b?lWV0Ue(8 zA1>UCB`1)*?V_@q`e17g54qxR47u;N7x)#UxVlJq#qa~&y&VMPC|LP*jfS!GPoHy zhBM1cXNr|+W=)>40$2^omhW~VQ5XCOooGGAy)+Hdia z0xwWr)rjA@A;XB0vG^wyf{d2lO%M(WcMO)Q+$#Kz#SPl%iF(Pxxmvh-p?vM74Ergq znUabu{lusk^b)<>B>x?93jO52;i~7vv;b|Jer_}2?Dkz{Q)r83xC5)wWYK;l{p2^1 z{xl*6%;Qb)A?z8~b&_{lGJ5}6D=V12%G$C>g$#t!lM;bvt1}vTOFzl`Qs*p*szNB) zb8f%*2s`So?+*8!PWLXAz1M=?1onu2SDd3!_sfujc}MI83=07kZ1nJJ{`BAr^Zdfrf_ux@Z9E?1`yGIYReie~+OIs_h-)ptjWK z)_Ks@*^9$yG>iKadm(95{#H=Grq*va2S?8RZQb`n9fX!*SIZBd%vBAA)dU}!rX7Bd zqsdM1<80X@;M>Fu%k-7sHxNX!fQuuMc$!5QMy}D30?MM zv-P6tKUgA@s6c7uJM0%B$e$+*gRfv$^-#Vcf^z*?{UicvII<|Q5P+1Ud*?$@*O zH%P@+saqigo`4tj=V8&wj0P-72}tD#dS*DsvkG8q>h#OcpMn~Sz8^x*Km-m)-i2Mivw16zJYry zBOBp8(s1H{Spm&o=~?3!&aJyAZP=m9k(m95huEp&N5~}*IKsn*$7}pzz_-R;_(lw? z-vPG)_cg5C`^D_BE? z^@CsD`96j)ugdZ(_Pee}I`|6-lS(BoUS~~q zratRnEB532YrC*D+n$u?D`EYGE;7h+m^<}qw#tA%O`=W-r**TMmVE669Ow~NHkUt6 zboR#X)N5mq3tgJKU?`=);5A0aq)hKv$Jg(D$ved3nRnUZRN~n(2g0{03LOX^58MrG zs+XEX)`tLcNT=BKZ2}X zj|)+Qxv?_I$i=`ltOcu6kA%=2t1Np-|KMb5uB+8z&K1m7zNhTkVpm(2acEs|Se)ZWK`$BSJaPiwc(f0gdPiUTj5+YNrY*{k~VZO7ujHaVV=1eur6 z@c(l8&zbi((WU@GI-7qNY73Uc9j+Pve-j}o%s8lQ#M=KkH{)5op{I#C{i-aC&gc8OqJWI?e>8@#*3n}2Up?ci$@v*;I325@?9U*)CuK*6|8pb! zM~}>~pV;@N#!2UOQ9+{m=TwRgNB!nbPjl)~C?jNOW3Em&PajS5^xtShF9H9L?(#R4 zh9UL3>HI6~c9-)#l+LG0@Z-Kv>?hOzEk#*28z?8rmT|{5|0zep$!QF?Q7%RaG}8a6 zhl#(j&c*6RJM}CZ4O%RFO%1R5jc=*42IcF$?J`fCdzXrr?~5ecOUPD-tg1E3p)ar> z*FE^O@7!Er{?-4n!4W5vaOF?AVED)1Ty_55qgKSm59o8uNt%#G&CT@2Sz7G3Jf(QX zZag8Ofi;z)rTbt4R(nU(&XF1px-a8CLdMt810fW-O#My7*uB@S zIipzMe&FEPe|mSGw`&}do!;~@?TtBx*94783Qt!m0^4iwq-?H$P>j4+)vt7j^#pGl zzB3~Q0K)N>_eIiN=1j>wKo%vwT=eLO>aera9Ny->e`bnbSL7!P6QSmEstVXGHK+o$ zu61DrQx*&T2zZwolVJ2ZfyEi@nz%QlX=1vw5nRit8oGM^^&eYeD4d8# zr3!0p1dLoszHQ!?3$4Enub9< z;=L{VN;9WerVW53zQx9jSXi!E%Jlcej1L?+^e!!$}DW+lwR*CS%{n<8;cAFHPs`LwBc-#>81?#%q zgr=8t>PPjdr8eh5dk~e{h&avTIR(#bwo58mg>cq9Tmytl4d@_eSJ)epA~yAu>e2@l z8WOI#v=V5rFqxc&{hsiusHB2$(n@wyW|Fr%acMac(>c?>%kX*KM&n41Rbg7R+TE~=lNRh+QI-)GBl!3{TBDjAlqXr z&2)RUmaBeAM*RZDgq=enu-i_;i-?TX?g1S+@?F3Z$ z4csyB1m=dl6AJXIhZJH%Au#NfyP zg9R>~V}t1oMK`57&z^=!mgX}aUC)%W{B8$-7_`$cfU<<=Fnw~AZqTw@jO7YLVv96F zN4Yun`|)$N7TV6Q)-pyA&OM6tvF9*yb2{EIm$a^}H~H7lfrvt}nd|p-cBRKEJE*#V z(fLoO_guTKj9(Lh$v0jb=tJiU3F<-wmDbvNS{0$sWqVKeg7^k;w7+34oyC=0hZJTc za6Bv*(w+|?G4Fk8$oa)Dd?HZL;tO~o9gGI$hGx|4d_>;o<9ZTI#qQ4;Gwc#{IDW{Z zyN@S--^9#2&1}Z7vT9bHCKSzHi={S zVtvA1P!4aYzLuE8JH6++D9OEfZLb(aVEu8j|E<&p2j}j@%y+1N4};!e3uHJNAh;c^ z4Tvd5W>MA}NTW+HdcuDPA*X$jPjc|ld&%4SU@{_aH+CkuT2(U(cxKFs`H0*VtfV-S zeZ?=uO<;0oF8kJ=vo|PwhoP7t!Vo9~DDHTTs_8{CMBAG3S~f_jv#heD8NAi(rzJ)* z`U7NYXVb4uo0#Imt&mz}@{{-QaS}meq_bVqB_MnZdy$$lw0t|dAPdZ^7Ps0ti579Y ziSS`%gna%<4JE71;kP%L1`XV$`t$4SU?dN3DhT%s1KaI6e4$Re;b{U#cWg1_&U!*T2Cs= zMOwMUx$DYRg`XXt(e)lbzB8{~h}<1FI(>x40x?HOBhcz2hdOSB5)GAAF_g%rE^HfK z(c7nKWnEp*xFJ%_Y}YR<1wSC5$T)aENh+{%iJrEXX&h zLK#Q;QR>P4PXh1*gtI(6%}g9+Q8T)-w?_(2TksKGY8!r$iEyP9+#G}Q{xL>PiL0wU z<7d4sh;gf!^@x6WS=p}EnG|l$Ie#cLJ{=vFsD-tU6mNeg*i!+f=DbL%g|@$2B)Br2 z@=ab#VB0ld0Gc)#$NNe2-29PaYuuqU$_&hH#-D|_M6wCywR;S274~*otmbH$gI+uw zZvp_RgrpU=;%_Bf0C#H$zd}JRbNoc3I2_y^!2b}8!l_i_9C;b4m;FpaFlC7mZM+w~d4XRLZpWMmA%6xUOcU6czNgtLLM5&%Q zHax=fR0IniUvh&@5L@EK{%x^JZ^s4mD1C~`^+y|_i)lb0}3$2o~4Yd%lq> zrq2!V$#ALt=**rLWKPMJu{CF>^MNET4l#v^Qa+ktJ7FO8R!wiiNu_A?q~dgpY~D}z zyy2A{rvXE9l?s9_PX@VM=jiu4>%pJ*b*|vg$9+hTaFNIl>1gU14bTUHb30FobQBKC zq+1LtxB>4g@^f|mg^kZYq};{t*}Kh!$k=zBc4`$y5EnTHoM@rGA2+t_UhjEs4MG~K z)qwgdX!CX*-nq^&m+96@1iIT-pcLr+XD#a z)7wq6k(*Ojrl4h@>+d%6GZ^)IqP?I$=~X4DY1Q7gDTYAg_h8q^Qv7kqb6mz{ z3aAJc+jX!hqt=Hn2LXFF-9svlOx|*ZdrPOJ=`IBiX{+b9E}dfH1X*N7=Ysy{{wD~F ziX#uLdRi^M=!(JVeOoq{cMNeUPwIHDVCow({Woys2_tkc6L17HdZFyH-k2nnP&yfQ z>#NecBNB^0H%rn|<2j4N1!Nvx#{xLd49+XjoI7S|EZ({bqoH{He)h-~w%J=-#QB@^ zTvo_7c;5{T`a%8U zFPF(jM(ZclhnzvfW7jxI01(h2V6A{2xa=!LZg$S_+UyOV2<)u(Uh|VNvi&``F;HWI zC5MsY`hIP(=^hiqLzImSpGr=P?tTsZ&Wjv>UeV|RU+NdEn(dqFKiaDMEKdp}00@l4 z2##t>@8+RMzFCa``5?`P@Q@p;_SV$!*N2zrRPCkr8Zz}bPuovH@v;Iw7V()@;MLIJ zBnSLQa6kCyhoH+TRr$d92vI%tfRJ#P8)JlexlC49yjmi|3dJ*#>p#aK6OIrkCcXQn zy^59>)0osR{XdKH*yt8aAr}XeKj4CG5|Bj%dlzwLT?@s_i?TR*PB!B4*LH-pvBdaN z`Dntz*J*=aeyv!4)F8SDv;=ndRTAbrCi`mCARarOMiZtOujEpr%E1#%Uewx$e*8G3g}Th1(~Z0cN#7ep zN$Tv)(*MR*pnE}7ISUqiDG*u4QNv@&_bVQPdTZNN*VLy56w}wCAurA+JRgHeU**Y3 zdeD=yMd}BMOuhI+f8i+w7Mt95Fx)f!lw;%M1X)J&>@U1rvCNdjl4iHc*+HjUtx;g% zTTSE#M4fSkKEDj1^L{?NzDg*HlJQV)V_X6#2M8x0GkS-mF^UIFPHWDZX=DD14%iT- zb;_B^h(Bg+v(PsXs{wS*!H2rtnM1=56HGv9zwQYCb?FEn#;W=i4U2+QlFM`>Ui zG3A?{^}p$zZY`W2^nH#Q4Fx*3@@GBHSrgVEK7x{50SED38{k-o`4S$Q_CsCFI)s!L z*{DMmtTuqVvu8O%-?H(--+)B*0qiE?*raZ30*z`^(Tt66;?o?#j>T@WiDl3t9_C z7At;_{`j@!%j8sE)QW>kH!DPqc5GEzd6KrzDIg2-_$HcBLduXO;0)fPWW7fY3Ir}s z?`j{0f~}r75eS+knN=8-!&RXbngaX1aqXnwn#YO4gZJ#A-8%a5oH@zb)MPI>sPo@aMQM|}&1IiB1#rVJydFXZF z>gO`Z)x+p_PzC4yDGIEl`Fn0Jie_2i1VE-F(mNZ0A>C1%JGXu#7wJqxN6HSIK4!EZ zf&Su}Ip4->f9)8gK_HgB28c(4pC323!p|_IRnZ{EqJNma5Tv7zfvpB{7kj zLpPQ&%;Q-%XY$wJZ+0;${2XAnQmG-)WsC?BG@IStNVrxl4Km#?3$vyfN2i?9iO615a$necGOkYhpYx?1EJPptZjg32w zHb!m?(P_EOAXyHMU@o`=TFY#@n3xr5Mbx!lQEkY zUdU3sGTOO!GpxLMlU)*>)6W;&!f^=0uVaP@(V0KP_Zh~febO?>D8HGlCz5dP8B&yc zdZX?PsX#*cbuuOzF&aLw@BTA)5Cm| zR{epQ8EkH%VO1;YllP{zkg-!~LSH}`661+A;Zan6prT+{=4}ol?!cPPyR;Qp*ENGs zs|6A!2X!w9mlVDDgx`IC=5AxvpgN!s$;CD=M=XWUS zlZ_`Li~)VD1>!V^Q8;AE*T}w6aqSc6^YY8Hkf~$gg$x;0DjOli`CJGrbI39~=r!9! zgDt0COd}kD&>=>H2?NHbwOD*v4qg&ht8Q&JT#{=nOYKs0%RRFgPEbYY_SdZr;5t+A zGfzsx42PU`Izd4BAkiufuC5T%%OlT=vx6Ip5{FANP&4O82Sf%VQ$EOo)<|mxp=yi! zePp?s+XD9tXDG|7HY@-8!m=8nufZ}xjKNRvcE~PO8Mol7Jme?&lJrmqLI>(MT--|* z#NlF=LU0a13mms31~E>loxt7T(8s>|E=lMJ$&ugWi{oI+L_X57@DwZ#Z=qaFGc_1- zE7Sf{a#g;!5EI>PZ8Y7h(Aw4f#E<;Cw4=EaIELBJ$YP;48S#_gb3fYUuiLBh2DS&A z$>GCeQ7Ump?AB*nJ~MnaP;ghE_uLqhfYLTMeRTe`Bq^&E)AS`Jk$sr9`Vp9M3lI=B z^RG=(Z+a0Zu-o*D-o~BU-MrS$rYvGu4-N!%M_2n##m*tgLw+?Ol*DU76kmvLz&7gS zE)@_ck=@VtA=2fdaSqK8jnte$2H3lv)mUFYU?)R-D)^wrgH@rad$1mam6oBSx7URC z5J^Qu(^IhI8DY;EYsVD6XW9()x0azOiMocP7W$Ep)7em}v2hlHR}sy_EuXlewhz+D zo0ifrEyM}ZnByB#&Sd*_?o3ku<7<`sW&I`|vJM{VxP8^oDno=8l%o9Z!q);G#V(be zF_@`F!D5pfu*eX>%smq_p56F*ft9vjqMcoq$leorGJ?U=mpS?MFW=4!FfU{Z_Ip~I zgw#J3>F=Ln=13=z3BQe@x3&*Nu1YJUu7#dZp{niId~-`#@#K1)y)QFVxJv6Joptz* zl6_{wffmhykxsD*Yfppa+F@iQ+CMcce?HyW&REulQbe=F+5GcFHE*0jDQZY;B8mCF zRt&O`+{xogOj`z0?RYBE@QG(H0g_@hyntrfkVmDyLo#eCgnhnrj8f{e5-T9GqFhRr zN{jP|yX}~t=%dHRs?<=$_b^XP&iQ>BL|$P^U$1GOn{!LPSe$DyN=cJ;(MOo|*lu0% zc^O?NryIE6N2qp{(b12nOI(tC=KyANq-WPM84A)Qnh^>k=E{sx;%xA5oE?VhMo&4rwx*Tgnei{ag9gY1!3E3bn*(AZ1B~ z!H|NCT}~T#>F>4!K6Z|wKMqMJWXdypQ!BykD&|wehe)KQV7Wp0K4+S%Q!X-ZHgX6E z3@AQn@!!5bBwV;ZGLm9>9Itp4H}}u=kT&@cM~u5=QA%hYL;v_7fPxO%)nSOaJIvo3 zcyy1I@6*IaAP^Id6_@cac3PNp%T7I65#65Tx68_$o+Set%e)Jv6z!2UBPeCW*H6V!WpBy-$s-$l}T^qN?UzUJ5+0CMid96sOB4s6FI8%YTK z?1=BQkdjM8k?tsy+>uL-PfwrvgoTdyi`pAY=Z&io9@lNLi}Gpun4H_>xAvrr%9)mS zd1Y72OSCCgc)x;-A|lsMm|l;>+~pcy;{BeBnx8C(x#HHi-V-Y1IE7Qn#Ri>~zrqeB zmBEK6adq(6u&ht=3ZB4^=Bm3Ox15qhY9K}tl+f7t^F9OJR5j`={0{pr1H#2nc`GxB zgTOKGMM=Th<6F8xrfsY>!~}H8OAPHt#J9j_-)0`+ks6R3RIYe&>qocxnpqLyEY-Cg z(ihQj8O@Y-l02K3ss|yf(^-;Rh0IH4q=0#o2A?rJtxRCVL+M_bKz@DZTh+Bts-(!$Q70vQ^ktD_KLB}k@|&dqLwmn@BzmsF zB|t2k|B*RF&-1o;!@6pS8EtRmouWi@$|JG`_3kw%#ZJ19+m-!P=RUzvf(*i7c1qj| zfLc#{A|7mCG6}%&){9Ke~Z^v z|8TUf3bQxTl_5<0%4*x|5y+RrK;L91apm z%{SAakQ`7_S{*(b1PBGdIE0eOEtNH+ItyHzIH8>-U7^{JdbJ%iC@E-wxo|(RcR{qo zy&T44f8F#`4h+_+Q5AT^e1KC>w(Di&0<8F&Tu26MEX%Zxqn+u`&9iL(cmxD+B2LKU z8#V@T(bi;vFcXFJ71dsKO0v*rf|=7QYROI47Q{XU&OjAJ4`0N7B}pUKUgOFs`3El; z59=!^?^}smfd!{@J-1TEPqQ6tZaP=3Y?u+)4~!)x>cI^Q_#p40*`Nj9%i;hk)>KlE z7hTKg{nIS`F`dkZjUsVCb0IkGz%N|;@V48ry953!2YLouyj%_kyNxSakmzmow)HcY zv6p9Ie|iS8Z~~YR4cGN#*{RYx3Na;hnKXcoRS6bIb`CLZKG#PCglfLbB)sa zMS8-W1aRh@hNa74|6I#?IEA5+{bZ7b1z;g{N~*|I&2`}l8xk7bB&*D2=twS`J$sIe zgzR^O_wbCql1W80-1R}{&T+xqAnQdJ<-^Mr=@Go|7K&fIHcnmDZeInIF5B*Auds@( zYTLxZf4^t1=5HD0T+TsN?XI$Z3&Ovqv?FV67pZ-mEh{4AZjEO*F&t-ez2DPAj6kh{+{eG{Px9o7oFFJv?{6ba9BPf|lWHxH z@&C*}Nffho9){$EIq-NGJhhp>kh!B^$?!kUVN(B1Jzo*)=sY~bs2AxjU`;;Bs=7H1 zY|>F?6_y7b!*=54(gfZ9`%uDAac#nS-p#6YLP0$sCX4c{uydMoMq{?%TXlzrXJtLT^@QiH@1ldW#%l@!cXSI93>19x`Q%){Vb}0 z@ew%d%LrlmM-g~d89*WpW-VBA?7SJ{AS6MAD1kx}!Vq-t8tU%`ucLj|+&ak53T_&7pxYY0$FgR%WPD%m)IInP z@ogC1v}dl1El)ii!ZAS=aiNWI$GMPD9O!2Mc9SgJ>#@O9x*r)A4el8!8NmjAz!7-z z#d0`}!d>`4&1ug`HdK#;-*yWvYA9hxt!-!q0*i3w)@D^nLpZHcV|NaMnD<31 zwk_7?w>+&=yj@YQb92is*D=<%9Dy&V%eM`9PP@C_`~_-sIQ&4(kQo*H82IZ}YyZbX zV~tNtw$}4UJ9pSx`r*CE*Va)7#P4p`YSqHm>qCmDkyn^G+>lZg=#ryqW*y>gKRIaN z{CN~TOFa>T2VRDAwa|LwW?(_A81zi`?M-=Yqy_GzU;s_mpaxop;(JaUC23ct zU@vNhGT`5=RPWG_ABRIU#bQ8n?Nc3}8 zm4bj}G)(806YSI5nk&o-n!apUxom&zsxZ*<5%NPV;aBy?=0aoMzFfBPLm`IzoNPcH6auk1SM!k3#{ zB$w=$y9rD7?W{4d`qUkHMN7u0nMeT@LVCiYvky#Lkz~#vBN3`0SF8vWHjB;CbkROF z^MY}=Nfjkr4kM!lc1diwl1RCgP_Dz9G_#{@Noq{e9GcMX@&< zDwj1mQs#+>Fzp};8GK56q_F=;wnZAi#IPQ}e&po$P2GA^He*mlSLOT%`)2<&XM?WD zs4raXXdai%Ep?p?;XoOjwamJOVMFCK=m)vfW8Nk;m2}R)Ou1MbM-*a*ry7C{)Qo}E zJNU(k=vi6T!K z|IpH={&;{4F|yT?a@%{{z+SCcE6?i>3+HI`?}hDZpaZYV#0LBrSDD<#&ToW_jnR6tA-K?owT&U9RJY$vxq686GpDFx~P_q5@lhdoyLF|tj{@=c0xbC}P3ZaO!ZzRZCn6vxl{=K6=ZyMehE zTE5<@k0U<1zF&9?oY$pIO=TTX7maOVX4kduJf?djT9?b6czAfslct0l!Ab)PR`m!o zHG-X_&~=XrfL%Kg>mY(6B&0Pdr<)Ey*ys#w|(ZIktxbamA6kUpb<&bH_ zmVYD0F;6`k=@U8uC&Ug_TEE`@{qD;1olI!9ttUhtF%0>no}h+1^pjJrNeizh{db2| z6g`n}v4pr6`iX>$nj6*AG50#=chk7lN(%jU$EK~WivYzA8{{dYo~&{L+Grt?ulvbZ zrM24uq#SDEsmobL!3r(=p-p#y)hz_`;vHEWnbbG6krVw%%or1?L>?I#SD=bPP-&ib zJIk$hV?_cM-EM1bYoT+vyX$8ZRi_&=8BIa7J_Vk5-RL7irqQZi{s*EtTjri6qyf~! z&1qk>_$cT3{%by<3-?!LkML3B@yg_ul7TWt7Ln_R9-&#%E^7^Ai^yDV<2e*R2b?e0H4Q6^x@0G8d*C#a(!O^&x>EC zg2Tcinguf&+uX5|zx{DT9meMz-$%p36O=DcPnA(@alEP-&ov)KfGILI&hta7mJ2hM zNZj}JqXWvPui8T8FwNJPoDhuykOi;$nlYXNPv>m!B%;+HPWyc_TYhGDl^bgBi)#F_ zrRaIl9*mo%$cRJ94miiZk7eiI+@n9;J&?{`B&?CjIG4<_A@8$mClqg$Y}7Bdm5of$ zrdQ)lrqoQGNZPf6`#IzoytROzDkNZ*NON_&ro6blw^Xh!C!-M zt<$q^I0B(9CK&qoT`t(-yT_um`qeEYNjJZkk5~Bn3;N3~?cKh{QPV=B8`nd5V&&F8 z!he&*r8)&{^zwYjX#vqX+L<{P-DU5=IOMkiRPK+Yrh~Rlq44*S8aQmD5lG^C);LEo zsm|e+rgaX!*_6y(493L%{Z|8&ZzXkt20@!xT~o}TBHcmTRP#-*McrEY1>WXH$UR?5 zJu1OT#MF_7G|itA6kP~$+bCf~a?LVgzK++u=r@C9w)xi1Uuq!J3)i_K38lznkU3Nw zvv5IB@W2uf;XN2;6v!h4daEehHdL8kdiXuc>g2FOp-Cs7CH}%{=ic7-B9XypxnH8+ zk*9R%577v%bWStJ3CmEU^l4oQ7eRieoYh%x5d&~vMM!onc9I4}J#74{3xRy1LvGeePWjXbI3og$^b zyoUx-)(ol^YA4YT`V;#c{e{3ZbYy%7N2%Ds)xU+zXsUq3dU+v zJHM>`G-o)h!B?|du)a_PebB1ZS&#xtozm=<#4i9iZ_DORwONUe>}vwXYi|z(@7%!o zYRL69r7sslxSf}e0CpeJm%9vd zrDFsE>BHzDHf`p{+j6T7homygAmv4vqH=T@Rhr~dHG0Kz?L5^+;eP@9DD)uu+zb(3 z%~!=Re)$Ci-2<%M*n26r!cL2JS197)_5``m(te$?#3b_cVLo_|L#F?V-CFm-@A}7v zwd7{)<+J^>1yn4f`vEK(bx?~sg7%TtEuk@k$(0Zn?Yx#ja?$qkJZW6tsz)nqE}(4% zc`EJrOaK}oAI6abBAuhm?8gc9YKCR8KO6_Sn`Sb7*nOsLbtT7g~7 z(}xM!qE+_+J0Xtgc}UVAnZYNB-b`T`d*JbY>;BYFlQSoluvtzdeO%`joQS+~mZ?~_ zPyXW~fGn`Q722c9$!SC_96BJAI(ehNevGx~IR(hz8kBxQ=(?AmHgm}6(PC3c*G$&! zPc9HJ>$)2d3@09a#}vjLc8{G&t4}y|YbcRaO_o0c5H10LdTYA$2|O23y5%!HToJO( zvz^OcpUOPNI%{cb12^qOO{P4?D0ZU6E27!=*HRR5A6y|{*$*j{(}z-oStfV^p*}eI zYVx@v`%0}q8X*J~%vbBGL;t0f40(M}<6Kb>1E=5R?*S0bkRY&bE-V$dnEvfF?GSP)qskdwW{h^nV3jA#ymtu~BTF9Ly;VWB? zp}2_6d-cFJsOLq{H554J-ASFYQq<(+G&&gs2|S7gD0`a=#22t|f2rJdr2@-6BzjfPs1lWwalXZmgQ3Y}yd3b6 zAlNZ7?WYC?D|%~q*q%(ec(NTh7DK>qv9F z(2FXRaW-L((y$NZE$2~S5qt{FqTKF5c%ptMEGOIpj|2OFHg79XxZ@_sjD4@)+Y03H zLBfnfKj8Db1BCJ^;SIRc{RI6E>3<)9LibGnKr4X3kfrzi2N+1m^W$^EH24Zk0<6AD zhEP6B-1lw)CxG?93Mk<_57hM8w1fi$JpcwkKfiLE%iPXfnLYwXp`~wCuZZu)Zyaxz zPaLvJ+tkG!mH=iHK4U_sVb5tZH>1pFwD3s7@WW9f zUg-@1u`9wZ@Wfkt;kGi>5zaLp9zk>2A2^Ywc6vipb2jnTKig{_W<2Z?4q#fh{S*h+9ZVMk)O=XIOz)lsBQ15|JM_MrOh#@wFC}6fA7)V!hxRzx$S!CU`LWVU1v<6IOIUEZ4EyC* zwrkwC{$Dx{(OW5EMvQ|7tq3itI|2?FwLQG6o2_-$trKcA+_{ShuZB6Jr0%zqs^vq0Fscsj+RbCNs>_so3pqx4d^aJNd?UoH9FqcmIEq>#PD;3TDqWln3}v5X#i*lYax&mEb;$J)Va-dTCmY zALa!)myBQc@wynvylo}C+h}my?+7M&9)Clivmn;fxKngocG$&@61LUPw_(gAw%dlaJNt(X$+8W(--S+KYkmI`B4eCN+3$D*6S5e2 zX#fQ2FqZMre-S|s8EY0=eu?XEL})$PDruoF{|<+May+GEK=S#Mz4Gk5ue&Bun3uLN zdzhZY8}Qm>5+q`KcnH9KS!Eu38Xqu%70R(AAw4{2B$FjFG`g2DrDHy&2(S;F?1?hq z^Cn-ZE?UVS!RRlt8u>>dgSn>7n@mbCisF;0{$C^h$b;|MVE!}AZTBk7ltK9K)A(KlZ|?^WkX$!%ML)jPPst1q-4E-v3mUfZ z&Ywz4)$EM1^e_UqTNKQ#HAkG-;2Yr+XZsjIO2xp=Z7bEdyp@G?O?>N7qJG+*ox-P)J05eEZj% zN?k`UH7pDk*1X6yBgUwi>WFVggxxw&*Op~g5s?FR>V4gZs*{V9AkGTt7or?JS%4mN zGZDQ8g1V+(TM>w_Eub&yo!5hPO#o{+o&Hr#XTZp9CNLVdvPE8DL{ItM+0hSsMXi!+ zlyOZW>H*q0u2A$Aj;FI<+CJw|KlVxbmP9Fv+0Q{<5`uS1EfZOrG{*d5z`#J!F8atm`8^KQT$Md#4_Y;wr*XPP;CcP-4E#krE zomZ+n^FH^g26KK<+3CtbI`og%TCO9nu(x3mwXolqwj87j{nwMBh+45&1Z1`|uG0zk zAton*ec()lXDUTmqjsEcBR^d6V0H#qwkOeXoutx-SVn?Q|BOK6$xaRBM&!Fi9aB@* zUI>G+ZIDC(8=UaVQ8kjX1%%ZRKi&;tiMRDcYy?8&IM2m>CYtze223JMaZVLb0|m95 zZT$BAbO2~}1cO`I9VMv_p0Dno41Kqxtrp#?>OP--0^=jgq%_IW{ul+(TC?~ZAiG*$ z{V5q3G*T&4?4bxp=u|>868GD;z?|oN^1{g>spub!nK)0b@VGbTGNHjyev5k5?1wsH zzQfHXQN=Jid7PZKXCmb{j!$IPa0-n|`#;Zq>glJ=HSdX(YUD8`KsFhew1>OzyZ%E; zUgY2Kg|{95dE;{dIHd2Fk!F+hCt>rb8Z|$B6YVGkoIN_fIC4SjfCC|5o`pN9TXuVJ zy3RY3v|_&(A8t-lyFU1H*Ftq~iE=J$y)Oo|jX&f~J9zcSo zbFrOhQZ?8iArgC5>{Kl0t-)-QRX=y!GF_n%tE1jFDYbFH>T&O_F0=LIbClaLlNOV9 z!Nkp|!$9Hjt~`p~SD}2-{Sw2!mGjarDu6s{7m7K(o`yDs1{@qU?1EgF2?fF_q}5HW zag?6Cv1CRH!>>8mm;4-ODF$>ZC!*JEDV$`&&+RbyU8)LDL3M7#^4q7NPr z4PZEzP=1w_8^U^Hu@=m5*-YiwkC%&{iXvUXgG_yh3G}_eNW2eY;r+sQvBcfPO~!n8 zO4_HUG+pimQ@g4d7yL^hVWd{|d3DM~qu&d%Hr_L1CE#jOVGvq81p`vLJ; z_PM9GI2vXL%l<}`u`bpv(?BwwUXTWG`_sY22q%H`P0djIWOzLbt6OK5?8Vpoe}x19 zD5CxeexN**khO$(DOvL`b4P69zYhEzEzdC8lI|l@F}_Nq8y}pI-U4YE;1jeJ(W74pR%1kb?Rf#1HW9Y|GbM6>@hYW zx}`FV{1RNc)Y`4J%B&s1sR;980G|UH_OD~Q70}N(PNK`)r4dboQh)chvik1{^q?8Y93O^Q*lq(mZR;py!{)qM7S%tlPIUt z*6{a-Jg~mESwUjHRtm`52El(}5f?*dLWeCeAB%%&c*Gr7}x8~oxjW58CoNjYgI$tE@bzSG2bFuFJ$ip0ikoA+8VD5kPH=%vt zbS~F6Vs#wl#z`G2I!_c&@?W)@umK?e(2I;lPD3k$qu0a?e?G=7gNbot0*uP+H?>5x z(JOOH(3dnQxq|imRc6?Kgx5{PxI^5)b$9#pjT!ZWa`yP?jd;z)@UwJLLsp&RzrofX ztBKxftzy|~3xm(=<_koRG&=MHv0!(#yr#z53t$`zh1?xEEu}+LPi+T*YTFl!pMEAC zQ*2+R<{gCl_1|kgwcstekdP%2WX9+uJ@3{gPo7!tFDTP2H6AAl7lFs`r3eiO6X@M>o5q%D8!n>aS@>PU^r^`smT3X_t zT1URd1WB)sBcKGP-(A6cD+aI|cuq`xsz!XyJiz%`{!80t(Wv4~py0IK_>!zPYhR%m zZA{0yHcOKpmKt1_e3IU0IiDJ`!J954XgnjpZkh92G?)1v+R1(^Fi#-;)Tqr*o?PENCSb2sfE`}Qe%Xc{h~iZIfSqcR{E zzv!sZwV+gH6Lf@10fU38$ck+Jko|MhDnySYP}{Z^^U+jzyO*_N(g}w2M*2*0&bBUt z(T63}XL{rO!*`Q-M#~R7C!}ybc+5&%b2I@z}81FnCOZiF_rwA*^I6cWBukZr}0=^ZCDB;nYZxhF9%`cubBpGEs1 z>D$(de`L?m<3eY3%KG`-uso@p#*Zw^!L1gAW04VJOB1!Bt>u>qzN}FV5X&AktXYsN zX9BJcUsQzg%dR*Y0rakWC9_#%_u@Hcm7^p4NZ1Wt3vySle2IQ^!9cfWe6o>DqM^Dh zmr`8H-DjdP&BnI>kRZm#4M(tL`EiPaEYZkkv+A=51@|wGBw|f2`B^uYh|eQUeQ>6_ zqv0KA_}+iT*~(;QL)ZP{D3A2LK%Xbe?m^VAp3JngDKSP>5l311D4oaBXm2E~I-<|e zlgzLPk`NlHYxK_FaeqzD)HOHHTo^-cb?j4--h(dT3wUCKOpSB3_L|m*^qzKL+lZ6t zud|GOaE(3A0x!=mD|tA&XwT0WBww8+U@G%~`i|0-}fc|IehL$87!-^Pl<$MYoX*QS1GjN7> zVRh-A!cdV&l0+}v*sRR&n4ZV(>juk+7`s9nt2gCFtek}urJ?U2UYOH42 zMa)5gq(BWIBpaw0v#JTFcI80X_uV%6(-dM2tZLF36D-p&$0?5#Ru(hyP}w#obgbmb zoQCc6goUGLKY}ie#lWV^-;z_GV8o^-gqxd=P!Ml?UAnY>?-)&gQ_#K*I<`A^%SoBK zB1Mp^LlBt7Xa9wv2|v@LVL@Y!FMGUvZ;KI&(426BP@ri)+)xAmI!|!eW=1C)TxL$X z^opR>FwP^x%B`F$0aCTlzU@&`Te2}XiJi~9vu#e#BF-uW!ll}fs($V@+i;e*FS8iKV)dws2|}C|d&3I@j1&BjWH?+5hVVCxZhv39iMRtM!zqdV?g-}gxtc|uD4D43vKKiXxU z7}JnYSShS!uQjn**!d;CVx_8q<(msC0x^UOk|Z;+xQay2)NDDvL>i>V(Z}~k<1aA{ z%Gm{=PJYX$h|-TlXjJf``xx|Q7i0wqaTJI*xfNDfr%6@f&`VPgdR%8t&%#gezri?< zed`0~9hhY|OByCqGoyz1+PXqTfD0}cq_a(Z;XX)*)X@&s_)gcwcA=RiUwAa6_=9V*j#IG#sd0AS_o3A}2C^%}CPKP-vzp}Y9d)AZ|^B%cI#?#Cm7-G14CnRg6`- zaF=_@frK8!8#n6V;)kOoobPtD_S>%Nw2KdD?2j(U5~d}khdB*xm@v?re{e`oZzQ~3yl!e4AJ57s z)~vuDR6}@?;8YrJ3JU<;1@qpZ1#!8Fw$?EpvG634oWXX*Yx~FF7~-6p=A9+5RgL?l zP!0(%$rR6+n`gS-i&oa5uS|NF6X1c!O4uc%M6K}qe96{x(1Y1bWrax;>~pPay2Mvf zu6#Aoi+)R?rLS{Nn@wlC_QYrkNm2hByLm;dD zJJYM+9H39T21lyG7)c=NVr7|npmSXGXSI~0Pv|iofn?etkNV#Clg#9sxPQsHcPvvgO|tcYQEdf0ExJ}w74P&sX?%bN8Sve>i?z*UcOla#8qok!X+ zFD*oD7&eFNMGUWisWb4jnmZQs4-tkReyey9W&D`CuVG?B?1qBah^V9so8YJva!iLJ zJwWW3ia{<0%O#MZnJ;o=HTM?`2Zgm$FB8hS_N_HNr(robcbP#HrH2_nqlpG_8rESS zwCG`aMCMc%Ol@&MQluWQqaRk}+w~R(Vk9*BO)!AzLCB0 zyEPlR{SG}wb5!sRb1DmJ|5~cv3ToqXR?N6cm4lWc(~dCBnToXeq9YzF#_g1pHqcL} zB#-Pf7F~)ix6E6>oSKQ7sIu1x7!B_w;IHI;1q!@rgHi!lif-Wg?FRUoouN z3UMGD(x(k0P0ZIqUHCTDC9Xj#0?>NAM+MbY^>aG+VnjIuq)^?PTRRh~1xp=ck@fJ+ z?aTK9HuunIoB-Fqh$LOIeoN6cb$U&iv6b^gu?azSw^7031&Il`8|+c1&f<@>n6n^G zUhAO3y*3T)FAN3^9a?aq)7pvAS_B<`xx%*-$ghTlzvr;0PBG}b;GWhVx^h{Z@ozZp z?+~_f&=OTm1yCaT;Wd}NK!1N7g5>%b?2Xzf9;xCsKN3AjTrpKMSxg#hBL<3QbNx^2fOJ-i0d zDWi;GG;hIpzO($|&x!6l?tV0L-O0sM2%^c|m@DvS``HWe)E-{hu7Wo&`jJN=*^nZE z?OSI-zM0Pzh? zInY!iw&ce&p&yce(p>u)A?^w)r8T2^OpRDY6>DsRq2`S)ji|AVJe+) z!bLaR?lCv~@pN9@@JaWUux|z9qY@)jJ#>MU5l6>5kAX%GW&}opq9n{V5S3I883DER>=pq9iZN&K}g*!WhYU$amD8f@o>66F`%~OzO z#0kV!T5aQga`^-1^xy>UF!W0r;gH*t`{0=H98bfj+ZR+xAEew_OiUo*HNKOBO=E5u zn7&UTUey|zUN>^!GJ;xyE*17M!L-F5^Y{;YkutKO=%sheDfu^m`~At8O#xbNSp}+j z2J3Zqe$m`M{?7&Keznu^i@$%umGTfbpjRq7(kR5a(o^nV@Pkm3nt0IeRDSpcys%Uh z8=4d~e)#xfg*n~#&W%)?OM~n+6D|G$Q-&C}Zl#ApV@K(b+D#z#-g8Fb8v-fwz}+;a z-ZQ+zXt?k=*YNy{Sc+Txw-Ns=FBiM+rXhqFl{C2dDYe|*F?}_#&(E72pdLX9rR7yh z1$ME7<1}FiN41lYne{Lv@;5F)k1SJwKV4a+2Suaw4)keDe#%Rnr;5kg}-xl zX8C%K?wPIa4itP*Mul8Pj*~b1N8Py4@E=Lb6y`H;!>)s`sA_Vy zs6Fw0n%sf1oU?8ThEh$e>(yN%{rbh<$f{byE*JeL`y2|`9W1KOmg^m(bXOImV33oh zX*HXkj<7X^8Gf-P9KKe`$mf*Y*|=~C{4sD$;dX*^WL#ztcCR5)+!L7 zGbW;Ga8R#??P&@|2f4)wmBWS5mB!T1v)jK&>0x}&dS>y4VNs!q@ynEy+{pCZWp!3= zx_t-g6yE_x)p!|cYZvMzq(8m4<#c86KB=?KsgmGYk@RMK*BwjK;NPw3uyTGv(|Q$b zIsYxWsIMDshLEKA8$mSfGk$*t{x6NA}?KCL@x zUOa84ze_!md|OeeCzbA;3x{4|!v~{_wm3FS+wB^~pLZ-xH$OFYU;dWl#~ZP^j#(Fm zsP?I^-&)0%PhZDueCQb^n*9`6F(zU1#pzN{H1UhzUj z(`}=JbYMLBS+Zc>apJ25B&^4`rv;mRCCCSYKK_|(m@{gbUZsguWiV?XalWoQ4bmuJ zN-v%v#2JyDJfYQ9zI+I&ZOZ3q;s?((HLxsTFla1WPG_TOolRh>TG$EIR{GiJfiA5? zE@4w#>j@D>6uq?~TV%gn;?Z?j%?}-3N$&1dF7V}HLU&zNFh|$kkg4`*?H&zMx-$HC zqdJ+$gTLwy3+@_aqj-FlGOhtjz+IO!6)$51)}E1y`viF68O&IE7YJ? z(&$0by+N5@PaV-&Omgf>7cEBDHoGB3$#Xx1_bd{!8T6wGAhFPnM>Wd?gn0`JnE<|z zQUPakj%+*X%xP(0W^h%w?cjjQDPOI#>PO;BTDy*B_xk6WhGw!}r^r3nVq%H7Y^gb# z7Pr7vsbRel{fbn>z)2diY2|h&7lNo$u*4nbc&OaZ44aS1#!KLpRn-WHOje{ z&@|x=(UCAXZ}h(Xc7_XMe_(0H-?aoW3Ry+FIg?tcj;Q_+faoeLhX#T!@?^**B*;g? z!vgO*N+b{Z&Vg=!w+=ioP|xqm8VwA%MOZjlvq74Xo`{*qlcmD@!;|sGjW<7UKi7y~ z_JdyugVAx}bez%vS z*`HliXV+$(y0_L}-h zfw-5j9~BS08=+^@wa_=)7k<^-XZ-Qq6~Ocd$Pe;&(YcO?<(>V9+=sIrw)<{iO)YfZ z=cfXw(p~xx`X2h)eXjVZC<7pT?!GWc6kG$`1B;#lKal&e^8w%=v2VmbiHCl*`<}g~ zUQj)DuN!m`w*b99N}pj*rhiTEd>np=2vUDYzt_CxUU)naZz#GFANtL9y5Aw+cV7bP z{1$z{UM_D9{&epEYy>+#j$aA=R-b)efj3+WHP^r_;(dW0!6+ar5c}EeLly{}%{}kl z^jv$7eOG)1I0_yb%y!QMe1YOX__tCZ@GUnoxA)Uz?ANA`X&|r*I1T6q^aJT$J3caj zpVy4T0dTr|5?~Ev1FF6m054wwo*#XJ&fUP*QonA%=-Uz4B!&v;337@E{@r5%N+gIP z1fnv}h8zlcRbbh5us?AcC|_A9$S@9nlZyMohT!DpAFBQV>>o0VBq?IrFH_*H4DnZ< zJeJNghxy~8DWMEV+60Y%$=1~Gl%6wU1bApoMg#EEMjU4d)B9V{1=^LR3VL}1*x1-q zMhK`KX4=YwG^@8dAQ)dt-@pzwuLWO5oG!+1pT}9!lsfK{4IS{N?}O@+*rz4xwQ8Q- z`uuS6=Cnt|jjxm-Cmj^~7i@<5=ZMKORp|a-DCu0lRH$jKRjkQRU9JUD9ncr6A5!F& zkd`*RNr|`I42uEJ)?E}_WQz!T-Cu0^Nv{n7PzSCVVcyI!dVlXBFIo^?4R*d9S3jX? zBcv=Knn3HDIGYZul?|%kgTkQmG_>et`)UA5$sL;fRR@Ch2QRrZVdIt3`UeY<-#N0* zc1n`F2GIeFJ)spm(Q5EuwI)MFKJY76 zw~Mr--y*BGd~Mu6XxhJ16AkT}GW>oAULj;Aaq|7l2(%5cNgGb$qE)^^cA*!h^MMqi ze$uPJ`tVT}qwgOJ^YhKjV$MS$s6J8DIcq^p zvoLUnxWr#|oH6;XVQF4$hUDJNmEmN@P{?mS6^fy1j1=}Tc;;H9cRt7_WZ>K1--Xeg z?d3K{pVsvg9EvAt-taz*8|pN=C*5mc}(83p|jn&&hMb(J)xq?;;>GNdpJQJ*aR(ts)VjnZ8kjz-EcTpL5eu#!gzRbjb zdSIbo_0qH<2l@xOp+|iq2c~+o)Jx#sk~S&q3fT?*`Wie(^e5KI{Q6P0iui_NEV+ zs@8V$Kbts97S{d?oC%sf`W9S*(~o0ckw(Nfw|8JA7^U?lM&D*V$_%9ayi=Fas%?vIg|ES!5Q{*#z|DztI zwz@_8KLYw+6#m<|xzqA8qyC%Be?0NuW|M$H4XKN#t)my6Re@6OW zm05lMznbl#;a&EZF<{^?e!>5@T>94;{^n8Jx8{LP`@c#*Z`QPmDr_0h+{7C{#nER$ zs)M)xgceAY`L-r5ynkU*v!9N!J{Q|xXw#K0bH0N=yn$Nw|5qIpIKg_~%*- ztMoQV*=t)tH%R?o_ZXx5=lwB@46YVSOVZ&ilwStY648w1q(i@t9e3^F#fdV|c%hh8 z|ET}x8{zK;Y0D@f{HuS{9QL;nkk{!ms;@hFopP9H*uE|N>q;_|gW+_O(Vz2gwbMci zFe=pl`fq|qURd3NltzA21-SN^x>$>Qu6!5TBAY)#|K}d8nYGi_nuicw6_1d-|J)~Z zFyP(S{5W@u?{gn@!@ocAKzi-Md)n|YJ>nB%Csl)wXLYm?ab0^CI&zQ)?ho=YxD}ca zB5mBt&3u;cCFxeQ}*qr6(ZPJfvie`ODex?Or|>;o`Tb6M_!WP zZ+3gsl=_;-_apHw*6k+MrG_=TQv3m#MheUg&fl5}VFT88V%Xr&K1bFjU7jvGUtF=r zBIOB38KXJyA`ZP?f5{(=FRjfqP2YO7k>gYi-AUq9p*h^l5-{fIC)*vr!PlD=IKMx} z)@ma-{Q@o~{BS4PtB%P6&ZEo2U;`p$uipp|*{`~>mA%OwbBiw;S{?acXEj_)i*{M( zgLyJb_g{}zl|vw_kpRyn3VwXw6+KDdzE$V4J{veW!Qw(FbmShV2YoOoE^k+rOYRbX zw573C{_G;EFudd$W9_`*5Vj*l6_9M}7_X>JF;vAQ_-(0Bj;4p}r-dvC6+GJBXF7f@ z;YmPu+ceuOVPK{Y65=c7+3Z1m*!MVlNM`M<8BaWFMjJR$3NcX)&4G4;Mq9Tb|*hDs*1BZzYOTKpi z{aZjCA?#I*?MXW^Q>xb_#UrCnMK(*YIHj6Qj)D7@Bkit&9b4oNvFR{_Fxug9WQ*3{ z1C{kI#nt|)QgzjNZAh?sA!)PB=NxT|U;f18lFPJ2XYC6Hd71oF^6GC7PJ=YN(FoCx1b>wewK#Gej! zZp9XsW~&=<9<|fkB*)8WwKbSl8dhN&PhtOLqrBV8QjvDz8KIa5TL{NI__~ zo^ZtK89r1XzwANwaN=~5z&OGq`)yH^57-shf?L?X0+W1#Fi+UfZ{6J6>FtoHNh~-C z*te=5V(;5kCdxv(aIu6+Gg6nFnYhB+FuRHacCm}W4^X8NX$Zskn@Q$3w&h-~8Pv3NeLPN%Z-|>zx%?-rZazXdJTyd3ED&neBGNwWN3-!78I)G@8PAm=VxH?iXi;}fWzLB zGK3h&(*DVz7WrTfV8$oNF~)AKyfQM%RB#I~YW1=DX}CjT7$M%Kp)uls_ufv*-#mdn zYkQ>hjy!Sd=X5j%@dBIin@#KK8xd&7C;vGYUF_P!~w&%-;;0fyOzMGAk2 zL%J6eZ_!sR1|+e7CFwYOv?y!xk3VurG?JQy7#vz73IJ+FMgkE}puc7b>VL22-IdJWBWEeYt2K785a+V9#ZTg5@sA9n`OWeK_y;oCq^PV(6 zCu!%OgYTI0CVB&R`l;l%wr(cw1y$P3TWb|qmLqNgZ7BjSkKjc6EiDi9-&8n-nsolG zzsF4C{CNw`yYYr6v&Xh`>f~kFex&^T@|+|cjNJO=5pVybfF_53@jaW}WlN)GbQimA zTC!#ZdGEH~I{l=bUg;X~B``AhW>qr=-$OC@q8U^gTpPi+{bwjPAR6~Yg5!0hY{bCyHOG{<X>-S&I$D*w5eqnbwmgk<;%dNzg3^1?>Kn~zo zJp*{o-T>SmPH+3q10*25@smVU9tsvS*k;+ccm2VwC+7+EQV%nA&hI2&9#WkGuD5{k z?7oF?eKF|O*xJ~t4x})nM@FaIbi5Npjb))rJz9eaUn&Bf;`c!Kh0jW02$N!YWAfIP=~L?Li3g_8ah29jek2sP|%KHg&~?oh><{@s83yHYBbuA2qO8Y}%um6#tO_;q(hHkDDg&G~Tr zzmk+AhK%^tM$R(mE|vJ{gya~i>Hu%3lniqS=}7MG&PaRdBrQxafn2_Jq@BKA(zBBK zKdl}o3#Obhm`2Qi$Ka^)5i|aGQ3SN$IU_ zFQd8+jiM75Y-XsE5}Q`}dh21mM+wNYtkv>KB-YFDH+1gTFnYL7nPxP3hQImOW^7^#D0+4WfjThF{`JIAfl=6|G3<(^T zqekP3Ek($D=qLe#elAB1+6BDmH^gv^WpvEu8NNiG=pg$p=o{7T-}C5oNgfN3%9?cZ z>&tcwmGn-I-`%EG;W={-};FjUv^~jR2gR)skA2Q zl(bXeW<&PDA|3P|@Jn%ZcAebZ^Q4*RlDb(H``q7A$sJS1QuN$|Z#2lpJ;}@43 z_8|Pxw?4Y?X z$@|6$>69mGyOXmBbET8&I>A8LJ*4)*;9IVn?CbdtIpp4qFmMCtKXg*qL8m`bAPV4* z+##b%j<2W!B=_SNiX3TqZtL~bx8-b`q(_0yP|Ay_wv>xcp8%~$biF1tq!vaK~6QZ ze%YBS-a0`MB!b|?azN6uHwU=~#StSpW+u_56q_ImlA*)Bwjyc#yrhxjA>Lo2kNIjV z4Z{i?oaXrO1PruSeGLJcA`iUlYH|eMPKGo_kkzVc=TiZuz;(&P0|FXKH)f}%HJy+p z)C}k^lcq_n>$eKNq$!k1lLHACGOY50vVzJy@~52W)C0fgPO0Dy%=L)hLgFjzQbajI zvRLRRQImh=`HW?*sj3=ApW-+=d9|@Y((RR)*I>}q-A~5nA1$O^1!wS_l!&uZMZ;MO z>WKM-+AJoS4vyC@yuxk+3nK0XiX7=pMyEuAVXsi2;)(&=kY2j=s+=vOdSPntS1mVxr18hkmu*u!_LD+)OGMI!(>7FCPs~v05I4%s6)K9ndudNVDbc5 ztJH|_-h7FA39k9Xd3@Z@NENU+h(IC@6{_WTM4tz)9WYHA7`VJ7%n(4^M5!ENN*|Y@ z!jT>psocc8-B`R9scDAscVo{qQ%KY#X?4Uku0fF-EYTF{pUhT`-&)J@T6k+K6H2_iLAlGy z+T~r^hxbIfN@QeSji-@cX~q4W0q5uCQ}U4Z=Q?DwIsFe zFs#{NDcFisHOYo@`=itjy1HH?V127x^4T`k?O z$n+7!n<)v3&zik6tbb%4DJizQh@%NKd@6R(n#I#2PH5iN=0bZL3JJU;0D)?*I4-)R z&ZaPlCxn*h^4qpqO+-qd8i@XnH75;0X&7~om1mUnO95fH9J<-x@Atockx4f&Yf!Om zcb^LV6Sb!?ie?9ZK-9KH>+zQ+T<+)=p_jw%v@ZSa0sJjT9{wH~v|ZNm=cCtQJa@d7rOeO3=+mIr{C`a%ZEp4_XKI@aAn4am89;%KWQuOd@0|z}7 zg=IYrffBHBXUQmWGsPCNBKQGF-*c!!)6^G^bAtK6=LaF+cnZ=rkXVQTx3#NI_`e=Mq!O#pX4dsIk4uF z63Wv8V2s)2nJf3)(;=t{k0|H#ODb0xhI-<=s=~Ui%rro6wRKZ`aHlz%P=H!noVuNr zU#|t1w(#wK1%=Pt_?E1U!Ad7q%NC5QCFPgs(-hczeL+|+8twq>*lds|V5q^2b-yU-~5Sz48%i4J9Qdu%ev5LOlHV zB@U``>$VcLz&nrl1&Pr_%4tI{023E#?~9N!-Je-K6ZZQM*i#LM~~;v zMs{pS@l^tD*l`@VClT1METnzu%{^?oaw1j@>T5FR;|M06`d)D+ov<)YhX~>`f9#?U zNmym;A9^4@!Z3QTe}4pWQ+2AGFLD0WS*`>VRsIiq72VJ$Pp_o)j#opF>gNux^%CZiOmx{qqbE{%jwzDhx>CZ?PQ-bzqRYNuIR~Ew{H^ z7+K{jc~o-E!6J!Vgl{gSFL!Q)*Cn`fvUD*nv~{jJcu!n(^qrQ>;_FgM4J+hPrFt$4 z%nLq-w;$tO*xF?so*|o21&;98W8I{jH?Ga>G#3@b)9sR_&~nKRH#WrtsX@*gMS|JD z+>Kj%{C0+5)vjOX4@r36`cSRaDJj?vr!88(oYf;{o~`b%cW#8lz@Ww1C#UaDnk@o- zl`%-YZaInU*;Ob8k4yxU0`g`;F73`z7);NSr>76(1^mr1uPVjY-z{jWXMe07kq=bj zC@sR1{)BE-^23lX6HCQBT4`i^WT+5u6SM?;aj`;FY`3BU+-D*4rAl|w0NZV9T((;v z$JLJ%Oz9xMsJ^&(tbwg+1EqS4r$ceka`u^UBzvyS3hKJe&R6icAcX2tMOOx^Lv(h_ z06nNFPl<>8jh#LRaDUpyx|mU%XV9HR z!af25gIZssvq*!A5CprbR*mW-1bbyM$R3>~B`JFvM9=f;H$dcW$*ffIyIOy#_yYjd z4ctMWDc=C$G${9eJ0Wesr_eS&aZkTyo+M|8tnN4tn{G}trr7u?R1hqoueFoQ&>Bu4 zOjow;5QUF-PqTb7im-$0U{(VFegJkNf8<#q)fNuQ5lsRgpCo|Y&SRosfcG2qZMN=b zL55Re54jFtnq%Hi+XNxM>6SP7+#|fb2Hy-h#qah$h=hwHD#5yrXGvP5MdW$%0k9?< z7?$`Y%bq{&lIr#l28Na$Dfy$K4N~s;<^X$f8^|5hP4G8;XaFCX^Hz}8+b8LDr8mB} zZ0jGR0oS;oXf?nEi~XX?dE{%*J~AO;*`6B>`0LZ&LX%-;izvxGcROv#UMu<<_nc+` zEyWMt;o;MXD8&fc1O%j1jWz-Y`)jBZ0QO6XByFZ)8wg=-qf?|Fm*(p?G6}4XtkLAy zLs8CT1a~=i9P|CqZ%>CQsz$_2Ky!XIZzkcV z>MLGg>qlxv({P5k;p`2p0`-xDHAji(&96zXsi2G6BU1cySkj_0UVhN4>KJ4&W%Z{o zwrj2rC(iG$mwty+UE-Hh$>3@{V@-9J5mu?o2N|w`AtiqghmakxSNgClu=L= zsAA?}+gAtRem{A)dz4SXuV|-nk^*2@yZ;noFxt6pC$0D%&N&ILo>wZxjr4!@5s!KTQ z=}0q2<6~N%rg544m`WSt%UNRd&1?;CLr!g7Cju|jfJ#Zi^!&Uvvz^6GT!S5(tdPqF zEVSJsK1o&Kxd{f%RfQ#FJ33)kgfoZ5Yo(@|c~~j~4g~t>uYC!4=^hP7_lov-Jtofb z2v=nWdo$+?e9K zT^;LgR@7`}JhV?ee2#T3Tr8a0U#|TyaL7V=J@ybrQLZp|d$AB-pMFEE+(RffOiDj) z?0y?X=0_gZro7_S?kczB_u+~=HnsRUXm}wHmxS9!dtcAoSQuscTeu8cs3%2AK~19U zO0CiFt8S;$(*y!$g!Kdp$y4XI+l{7{lE@bN&CV# zGyOSY2`GLk^W)bHDop`VrpIv#0Ys333u@}NVYIm-9b8`iyfL03*FF^i zqR)kjyZN3}RxV3Q2#(P%U@~pMu_t20|G?BnlNK1N5A|r8yKiH9)8R*{M9sr!L@?_4 zreLvhqMe6|idK#2Bfk;9PyplN<2Hq5eDU@w#$08p-L>sTBJTJlxjm77w=rHBuG@KH zWUllV2~xIMoP&@3=sJ-M;F5pgaRn4_Q3G+~*JOzCvV-BNR)64D<0!8_AFKX`Ey`s| zc0>r-B#WJNE}ju6OsOH=AAD$cNaAT3toIBFU-bh$&Kll_TIr_vs-GiYWRAV_1L|LBwwKx zyP6|pR7XZm&y}DJG=MCU^X_@wDS;nc(DVj&RY2$rL(@GI3pr*&`; zE;i}-2)|s5@E9}7w>2;J534{KC{W5kY^4{1i|anV6M=0&nyEToo_18zGZ2cXtHd0&Zl1~ad?=#m&1ysS zWk=gBKUSY>lbE6xE4?685vaZCJWW0>;_Ae|nf|&h{7ruoGqC}QueO{?9VWFXTKl?+TjTpkX^nbHVNiaVkxXfXJE~W~b%6c726;$bdPQH= zFUm*#O~RmF8=-5yFusiO+bm$UJe704`B}N`o;wQ+rtMpU zMk`8>8XG_R3K~2YC0`puIKIyQL7{(Q+kJG=Zvv^rCv=?(kZ_p`7W!>>AbCE7n=j!_ zQ{l9)1KAbC99;u6!Y+kRF`)-R(`}nYQ#?h6@Pg>{T=xvm)0FmZFix3q_)fxA1IIyi zXZJwzh)PUMv#zHAGTMwzq0hbGh34zmiI9jT84p`oEaRDD=^W8JywJFdo;$BhwN@b< zaLm11-I}i@?AFPvM7;a74YsS+@%px~R2irjI#lD&#NKrqha9WLjFqyCEi#F$LmK=U zF8+Co%<6%Yq*W;(iZ@p7`V7i_px-+WL73n=!y@2QgVx)*h3|5s#+F6Kj7l)AGR$}U z2FE7pT#~Hyow3gr=~5)|7^?i8V%&Sa>p%8M?b<3<>Zwwo&EZ-Zl!F2-2^b1YFnL9& z`0!vytdBR7M(%~@u)|%LKnu<2Rp3Bu`D_DV1z--oO?CI6&syjEcfUhYNq;1ss(wae z77``u0cHzOI@C;%0JH`M+^;J2SrI7jc5GRzcTy%&X%oe95w=ivsV0fQH{b9Y;aXkI z5sG+%Kyvd>L2dN9llmY3B38P9?4g3ZwAh+WL-#l&rDxPo*P;CF^1{H)g5ru3%ryM- ze38a}fFLRjWd^IU2*2eCF?DM3eVL} z^v~gJTrUfMb`hQ)tzi3B)sn?|>|-Z=uk;)Sp!e)wV>--^nqaYcHLt61`+96##6e%3 z05Cn8Q7V82)4w^6B--2;9rBX50An7bv~p-vW*!!{V0{@qu1%Z%M3d_fc%dG%S93qI zxuI}C5V(ZgnL-93*i|B&`0!Lo|F;SMu;i2AfiFtUKdnxF{(>e=H@7O`1pN)I9cH1$ zh*K${M9nq}G~T2nrPdF1SWK>uSctC3(0)84q#Kqj8`iAG97#if%u4TSDJuK}!z?(O zwt@PXauJ1^(j%;eYWvU1t<1v>07T{@ZSV_+;H$$gmlSB_IGiW+LfM>vpwmvXUg1g>pAByu-}> zd2<3aSTwoNnX|d0v{og+Xblj9?J)EUwMD|kDq1ai)I-61Lfy}@LL<_U=@T?udK!Ay z4P2>h^7eJz=;~8gaUEi;GRZfm9`D7I4iY$zJ*myf%WGJD$c1{9p{gOK>Pz)U?$tpa zsp-|jV9LRUeg*eOZ-apo?eD0>cj8O$g1<u zqV2nLu!KaL$b4Uz6P{}biDvJWKKY~Ppk+AdfHQijq=ZC3nXTqDZThxH99s~l&+|Uj zkE(XQB`7dn3$}nblV~PaV5%w1h9HdE!*(wz5MyZak0{Ft9NGiw2OX`!S8PC@;>b2S z(Vtd-FOB@nB$8_r6BFYwpC#o@iT3;U3neAQZ5el?~R_+0Mi z60)O4bq?*9R`eI^u3>pgs1+wu8g3o#w8{)T$e{~)>%N5WdCPlF>B=4-5BsNASr^;l z(d{l2OnG`21L?3jAM+S6v^&EyAQ=WnLN zzs%@JZHboCY8n`!?PFg=-cjsBX*q_kI97CwN-(?Ky{k~N+c_M@=S#X78`6P$1AX2I zYhO=U5YgLE@%@G>$aio;u!%`%vMhTi`J5@s)opxAt=bClc)3XYzL3$|qudh;klRF) zM|un%C*k5H|6OZ_g~iM2=*9qalH;^o2xVXf7Wy zdp8sFg?U{!v4{ij_rR?H>gyd|yz1-YKqg0q_gO-`?e>7x?b76RQc zQqQGShd^!R$0cCxqHMCzOC81RGENPLo^Dxtk74RXxBtxXE^U9C`&*iYbuv4FIl;hQ z$%5z42*>?TU|+p;b(~z@gq-30+lL? zfK@)m=Zr`ysAtZOAQ%E*@lN+=iHIn~l4Kl%wZnKvvfAQ4qOK|$Hm|dtR_b?3@VUd7!Pnx` zjY%c3EO-Mjdeqj16*BH& zK7)iBx?1wFw<7L6aosoYtoT;G6=}RlGx-23J^Fdc-hJ?H#?4)eKYn3s;p>oRDK!k{ z4p7ygXydhH-FR}BcYbWLl>t2no<~&Dh8__oeF{%61jy0d*=2>#3287fk8b+~xXRpP z%4b+mn)Uo-&GZd01QEw&#&|r%_@HQIzoy3a1YP!~r(!}7-iWEJ#SI~liOCeKwjtuh zIaahaq!UOiflRhcO62cCvG-v7bdeqQUoo5r;Zz)7$Z+5cmb$Y}={(w<&X=qHHj0jf z_95qjI>Kj@dS^rr4$pKh1|j4W0#Jtfktg{QK>QEL#LnV^*^gPqGcqb)KjO&l06es~ zG?$g!w^!AYnFH{2LKwfHnVQiKDIYWot+3-eCFpD5#G~1WptW@3pn&}S3iCNoC$K$Q-Q*QquT~4i+Mm^c%@HqeswQW`aNg)@OH^y5O14TNB2cXwL6PG1~G53qR z3Bk@Z{BLr!W;pVy-i0YP3pn%>b*D%Owok~uTgOhM0eyAk?u0-t$6FyS8{ zP@g;q$fo)6_fG;!&0kOUot_D0`o}~F^JfEmLXZ_l6D`i##B9%JH<&_xbfx8II|?YR zmH#K5X|J_k&_RX@_(Os)^U1@w?Fs5caiV}y7JhON(zaM&WhORwpBQA|Z!^pP&2$_K zq0c*u7A;mQ*+T)fa_kka&xVCZabm*c=T_pg3;BnX(%d8k(bOl#2nYSV!yr81Wfe9H z@LBQCw3?H$4@^vS|zDZ7JE*Y^tzelidfJrJ#yU@|jY zU+H!}`4A=oSi2{r%NyDZli|ISN7fyGVnh<~C7or;PJ0gw;sGT9s_>gQ^z~ms?%EoL zoc!=TYQeBfBTV-z2A!TJ2e8FXc#Xe=3u1&-$N6=SF1B&cGeVG=D=g~Lteg0dC%5xk zdks@u&qEEMqG-X$wvG0mSA@wK2@9n|lwqe?J|V$$B10P9U^{ z0@nrJQw8=Mc>wcXE1vf`Ei>2>WGh2mgMfP`gk&+8i$JRzVJir$<{6twFafuu6j`BP zBv}trd?YA}j~kx2AcOam)TM9cCTt1rYf@E<28El0(VhLWG3K0bcm+y-mXSQnDazdh zr@&RujC!UkwRj&lrY@r9*%-{Nt|=K{JrN&de8p-wN< From 861eb13458d99d3353f679ae3c070a1df1a847e2 Mon Sep 17 00:00:00 2001 From: Cordell <63482974+cordellbonnieux@users.noreply.github.com> Date: Sat, 17 Aug 2024 16:01:10 -0700 Subject: [PATCH 25/99] Update tutorials/navigation/navigation_using_navigationagents.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- tutorials/navigation/navigation_using_navigationagents.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/navigation/navigation_using_navigationagents.rst b/tutorials/navigation/navigation_using_navigationagents.rst index a13d34859db..e404e22dd43 100644 --- a/tutorials/navigation/navigation_using_navigationagents.rst +++ b/tutorials/navigation/navigation_using_navigationagents.rst @@ -121,7 +121,7 @@ The following NavigationAgent properties are relevant for avoidance: - The property ``use_3d_avoidance`` switches the agent between the 2D avoidance (xz axis) and the 3D avoidance (xyz axis) on the next update. Note that 2D avoidance and 3D avoidance run in separate avoidance simulations so agents split between them do not affect each other. - The properties ``avoidance_layers`` and ``avoidance_mask`` are bitmasks similar to e.g. physics layers. Agents will only avoid other avoidance objects that are on an avoidance layer that matches at least one of their own avoidance mask bits. - - The ``avoidance_priority`` makes agents with a higher priority ignore agents with a lower priority. This can be used to give certain agents more importance in the avoidance simulation, e.g. important non playable characters, without constantly changing their entire avoidance layers or mask. + - The ``avoidance_priority`` makes agents with a higher priority ignore agents with a lower priority. This can be used to give certain agents more importance in the avoidance simulation, e.g. important non-playable characters, without constantly changing their entire avoidance layers or mask. Avoidance exists in its own space and has no information from navigation meshes or physics collision. From d49dfae4c74cf934a9efed2e5c8f2b611c6f9755 Mon Sep 17 00:00:00 2001 From: tetrapod00 <145553014+tetrapod00@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:24:42 -0700 Subject: [PATCH 26/99] Add example to advanced_postprocessing.rst Adds a complete example. Also removes an unneeded varying. --- tutorials/shaders/advanced_postprocessing.rst | 43 ++++++++++++++++--- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/tutorials/shaders/advanced_postprocessing.rst b/tutorials/shaders/advanced_postprocessing.rst index e06b97e148a..c61f594ddac 100644 --- a/tutorials/shaders/advanced_postprocessing.rst +++ b/tutorials/shaders/advanced_postprocessing.rst @@ -137,22 +137,51 @@ the distance to the point. Because the camera is facing the negative ``z`` direction, the position will have a negative ``z`` value. In order to get a usable depth value, we have to negate ``view.z``. -The world position can be constructed from the depth buffer using the following code. Note -that the ``INV_VIEW_MATRIX`` is needed to transform the position from view space into world space, so -it needs to be passed to the fragment shader with a varying. +The world position can be constructed from the depth buffer using the following code, using the +``INV_VIEW_MATRIX`` to transform the position from view space into world space. .. code-block:: glsl - varying mat4 CAMERA; + void fragment() { + ... + vec4 world = INV_VIEW_MATRIX * INV_PROJECTION_MATRIX * vec4(ndc, 1.0); + vec3 world_position = world.xyz / world.w; + } + +Example shader +-------------- + +Once we add a line to output to ``ALBEDO``, we have a complete shader that looks something like this. +This shader lets you visualize the linear depth or world space coordinates, depending on which +line is commented out. + +.. code-block:: glsl + + shader_type spatial; + // Prevent the quad from being affected by lighting and fog. This also improves performance. + render_mode unshaded, fog_disabled; + + uniform sampler2D depth_texture : source_color, hint_depth_texture; void vertex() { - CAMERA = INV_VIEW_MATRIX; + POSITION = vec4(VERTEX.xy, 1.0, 1.0); } void fragment() { - ... - vec4 world = CAMERA * INV_PROJECTION_MATRIX * vec4(ndc, 1.0); + float depth = texture(depth_texture, SCREEN_UV).x; + vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth); + vec4 view = INV_PROJECTION_MATRIX * vec4(ndc, 1.0); + view.xyz /= view.w; + float linear_depth = -view.z; + + vec4 world = INV_VIEW_MATRIX * INV_PROJECTION_MATRIX * vec4(ndc, 1.0); vec3 world_position = world.xyz / world.w; + + // Visualize linear depth + ALBEDO.rgb = vec3(fract(linear_depth)); + + // Visualize world coordinates + //ALBEDO.rgb = fract(world_position).xyz; } An optimization From f5fcba79e337f7de56b6753fa0dad557e3d17b5b Mon Sep 17 00:00:00 2001 From: tetrapod00 <145553014+tetrapod00@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:57:02 -0700 Subject: [PATCH 27/99] Fix make html with filelist command in building_the_manual.rst --- contributing/documentation/building_the_manual.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contributing/documentation/building_the_manual.rst b/contributing/documentation/building_the_manual.rst index 749cdb12b64..a3752d14ecf 100644 --- a/contributing/documentation/building_the_manual.rst +++ b/contributing/documentation/building_the_manual.rst @@ -166,4 +166,4 @@ You can specify a list of files to build, which can greatly speed up compilation .. code:: sh - make FILELIST='classes/class_node.rst classes/class_resource.rst' html + make html FILELIST='classes/class_node.rst classes/class_resource.rst' From ea604c400efa3d16eb8a7dec9102693f0015a95b Mon Sep 17 00:00:00 2001 From: Infiland <88491175+Infiland@users.noreply.github.com> Date: Tue, 20 Aug 2024 04:24:50 +0200 Subject: [PATCH 28/99] Update release policy information on Godot 4.3 (#9755) * Update release_policy.rst Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> --- about/release_policy.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/about/release_policy.rst b/about/release_policy.rst index 734a34b4381..7e215ef899c 100644 --- a/about/release_policy.rst +++ b/about/release_policy.rst @@ -82,9 +82,12 @@ on GitHub. +--------------+----------------------+--------------------------------------------------------------------------+ | **Version** | **Release date** | **Support level** | +--------------+----------------------+--------------------------------------------------------------------------+ -| Godot 4.3 | June 2024 | |unstable| *Development.* Receives new features, usability and | +| Godot 4.4 | To be announced | |unstable| *Development.* Receives new features, usability and | | (`master`) | (estimate) | performance improvements, as well as bug fixes, while under development. | +--------------+----------------------+--------------------------------------------------------------------------+ +| Godot 4.3 | August 2024 | |supported| Receives fixes for bugs and security issues, as well as | +| | | patches that enable platform support. | ++--------------+----------------------+--------------------------------------------------------------------------+ | Godot 4.2 | November 2023 | |supported| Receives fixes for bugs and security issues, as well as | | | | patches that enable platform support. | +--------------+----------------------+--------------------------------------------------------------------------+ From 3414754a36a7a6f6195974a37c893497cd3c17ae Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Thu, 15 Aug 2024 23:43:05 +0300 Subject: [PATCH 29/99] [GDExtension] Add missing iOS instructions and build/config example code. --- .../gdextension/files/cpp_example/SConstruct | 11 ++++++++++ .../gdextension/gdextension_cpp_example.rst | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/tutorials/scripting/gdextension/files/cpp_example/SConstruct b/tutorials/scripting/gdextension/files/cpp_example/SConstruct index 691f8131944..a1ce2492dff 100644 --- a/tutorials/scripting/gdextension/files/cpp_example/SConstruct +++ b/tutorials/scripting/gdextension/files/cpp_example/SConstruct @@ -23,6 +23,17 @@ if env["platform"] == "macos": ), source=sources, ) +elif env["platform"] == "ios": + if env["ios_simulator"]: + library = env.StaticLibrary( + "demo/bin/libgdexample.{}.{}.simulator.a".format(env["platform"], env["target"]), + source=sources, + ) + else: + library = env.StaticLibrary( + "demo/bin/libgdexample.{}.{}.a".format(env["platform"], env["target"]), + source=sources, + ) else: library = env.SharedLibrary( "demo/bin/libgdexample{}{}".format(env["suffix"], env["SHLIBSUFFIX"]), diff --git a/tutorials/scripting/gdextension/gdextension_cpp_example.rst b/tutorials/scripting/gdextension/gdextension_cpp_example.rst index f89754b77bc..d444a13e40c 100644 --- a/tutorials/scripting/gdextension/gdextension_cpp_example.rst +++ b/tutorials/scripting/gdextension/gdextension_cpp_example.rst @@ -344,6 +344,18 @@ structure alongside ``godot-cpp``, ``src`` and ``demo``, then run: You should now be able to find the module in ``demo/bin/``. +When building for iOS, package the module as a static `.xcframework`, you can use +following commands to do so: + +:: + # compile simulator and device modules + scons arch=universal ios_simulator=yes platform=ios target= + scons arch=arm64 ios_simulator=no platform=ios target= + + # assembe xcframeworks + xcodebuild -create-xcframework -library demo/bin/libgdexample.ios..a -library demo/bin/libgdexample.ios..simulator.a -output demo/bin/libgdexample.ios..xcframework + xcodebuild -create-xcframework -library godot-cpp/bin/libgodot-cpp.ios..arm64.a -library godot-cpp/bin/libgodot-cpp.ios..universal.simulator.a -output demo/bin/libgodot-cpp.ios..xcframework + .. note:: Here, we've compiled both godot-cpp and our gdexample library as debug @@ -371,6 +383,8 @@ loaded for each platform and the entry function for the module. It is called ``g macos.debug = "res://bin/libgdexample.macos.template_debug.framework" macos.release = "res://bin/libgdexample.macos.template_release.framework" + ios.debug = "res://bin/libgdexample.ios.template_debug.xcframework" + ios.release = "res://bin/libgdexample.ios.template_release.xcframework" windows.debug.x86_32 = "res://bin/libgdexample.windows.template_debug.x86_32.dll" windows.release.x86_32 = "res://bin/libgdexample.windows.template_release.x86_32.dll" windows.debug.x86_64 = "res://bin/libgdexample.windows.template_debug.x86_64.dll" @@ -386,6 +400,14 @@ loaded for each platform and the entry function for the module. It is called ``g android.debug.arm64 = "res://bin/libgdexample.android.template_debug.arm64.so" android.release.arm64 = "res://bin/libgdexample.android.template_release.arm64.so" + [dependencies] + ios.debug = { + "res://bin/libgodot-cpp.ios.template_debug.xcframework": "" + } + ios.release = { + "res://bin/libgodot-cpp.ios.template_release.xcframework": "" + } + This file contains a ``configuration`` section that controls the entry function of the module. You should also set the minimum compatible Godot version with ``compatability_minimum``, which prevents older version of Godot from trying to load your extension. From 1d05bdd9f12ee09716e790cec4b29cc6a8853054 Mon Sep 17 00:00:00 2001 From: MajorGonzo Date: Tue, 20 Aug 2024 08:38:57 -0500 Subject: [PATCH 30/99] Corrected typo in gdscript_basics.rst beging -> begin --- tutorials/scripting/gdscript/gdscript_basics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/scripting/gdscript/gdscript_basics.rst b/tutorials/scripting/gdscript/gdscript_basics.rst index 0f1451799d4..4204fd7ac57 100644 --- a/tutorials/scripting/gdscript/gdscript_basics.rst +++ b/tutorials/scripting/gdscript/gdscript_basics.rst @@ -1890,7 +1890,7 @@ If you want to use ``extends`` too, you can keep both on the same line:: .. warning:: - The Godot editor will hide these custom classes with names that beging with the prefix + The Godot editor will hide these custom classes with names that begin with the prefix "Editor" in the 'Create New Node' or 'Create New Scene' dialog windows. The classes are available for instantiation at runtime via their class names, but are automatically hidden by the editor windows along with the built-in editor nodes used From c138ee01eb4383a39ce272e07915316bb4d4ae57 Mon Sep 17 00:00:00 2001 From: Raul Santos Date: Tue, 20 Aug 2024 16:51:48 +0200 Subject: [PATCH 31/99] C#: Remove references to GODOT_SERVER and GODOT_HTML5 defines - The `GODOT_SERVER` preprocessor define is no longer available in Godot 4, since the dedicated server platform was removed. - Replaced a reference to `GODOT_HTML5` with `GODOT_WEB` since that platform was also renamed in Godot 4. - Remove note about `` that only really applies to Godot 3. --- tutorials/scripting/c_sharp/c_sharp_features.rst | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/tutorials/scripting/c_sharp/c_sharp_features.rst b/tutorials/scripting/c_sharp/c_sharp_features.rst index b3d8d1e8b43..94e9d539d77 100644 --- a/tutorials/scripting/c_sharp/c_sharp_features.rst +++ b/tutorials/scripting/c_sharp/c_sharp_features.rst @@ -102,10 +102,6 @@ Preprocessor defines Godot has a set of defines that allow you to change your C# code depending on the environment you are compiling to. -.. note:: If you created your project before Godot 3.2, you have to modify - or regenerate your `csproj` file to use this feature - (compare ```` with a new 3.2+ project). - Examples ~~~~~~~~ @@ -115,10 +111,7 @@ For example, you can change code based on the platform: public override void _Ready() { - #if GODOT_SERVER - // Don't try to load meshes or anything, this is a server! - LaunchServer(); - #elif GODOT_32 || GODOT_MOBILE || GODOT_WEB + #if (GODOT_32 || GODOT_MOBILE || GODOT_WEB) // Use simple objects when running on less powerful systems. SpawnSimpleObjects(); #else @@ -167,7 +160,7 @@ Full list of defines * One of ``GODOT_64`` or ``GODOT_32`` is defined depending on if the architecture is 64-bit or 32-bit. * One of ``GODOT_LINUXBSD``, ``GODOT_WINDOWS``, ``GODOT_OSX``, - ``GODOT_ANDROID``, ``GODOT_IOS``, ``GODOT_HTML5``, or ``GODOT_SERVER`` + ``GODOT_ANDROID``, ``GODOT_IOS``, ``GODOT_WEB`` depending on the OS. These names may change in the future. These are created from the ``get_name()`` method of the :ref:`OS ` singleton, but not every possible OS From f0d9618201ee8786f4c8303da29cb4d828da1ed7 Mon Sep 17 00:00:00 2001 From: Sai Nane Date: Wed, 21 Aug 2024 04:06:43 +0000 Subject: [PATCH 32/99] Fix comment directive to prevent webpage display `..` immediately following paragraph text at the same indentation is interpreted as a continuation of that text, as seen on the website: https://docs.godotengine.org/en/stable/contributing/how_to_contribute.html#technical-contributions > Upload your plugins to the Godot Asset Library to make them available to others. .. update to talk about Asset Store later I feel the intent was still clear, but it does look a bit weird at the moment. Further information: - There must be a blank line between the text block and the comment for the comment to be properly interpreted as a comment. - There must not be two blank lines between the two list items, once the comment is ignored. Otherwise, the generated output produces two separate lists. This a perceptibly different amount of padding compared to when they were structurally part of the same list in HTML output, since Godot adds extra padding around `