From a64854aa42d48aeb14c6e2eb45503d771f3efa7f Mon Sep 17 00:00:00 2001 From: DocQuantum Date: Sat, 28 Mar 2020 11:58:37 -0500 Subject: [PATCH 01/27] Replaced deprecated "get" cs func in fps tutorial In the 3D fps tutorial, changed the camera global transform function to use direct property setting instead of getter since the getter is deprecated in 3.2.1. --- tutorials/3d/fps_tutorial/part_one.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/3d/fps_tutorial/part_one.rst b/tutorials/3d/fps_tutorial/part_one.rst index 95b9c4f4a..54bf81b80 100644 --- a/tutorials/3d/fps_tutorial/part_one.rst +++ b/tutorials/3d/fps_tutorial/part_one.rst @@ -290,7 +290,7 @@ Add the following code to ``Player.gd``: // ------------------------------------------------------------------- // Walking _dir = new Vector3(); - Transform camXform = _camera.GetGlobalTransform(); + Transform camXform = _camera.GlobalTransform; Vector2 inputMovementVector = new Vector2(); From e538104ac2f57279221979d0c34d74210e43e260 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Thu, 9 Apr 2020 19:10:44 +0200 Subject: [PATCH 02/27] Clarify how string enums are created in the Data preferences page --- .../workflow/best_practices/data_preferences.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/getting_started/workflow/best_practices/data_preferences.rst b/getting_started/workflow/best_practices/data_preferences.rst index fc956c3a5..75b5acf32 100644 --- a/getting_started/workflow/best_practices/data_preferences.rst +++ b/getting_started/workflow/best_practices/data_preferences.rst @@ -273,10 +273,10 @@ limited only by their imagination. Enumerations: int vs. string ---------------------------- -Most languages offer an enumeration type option. GDScript is no different, -but unlike most other languages, it allows one to use either integers or -strings for the enum values. The question then arises, "which should one -use?" +Most languages offer an enumeration type option. GDScript is no different, but +unlike most other languages, it allows one to use either integers or strings for +the enum values (the latter only when using the ``export`` keyword in GDScript). +The question then arises, "which should one use?" The short answer is, "whichever you are more comfortable with." This is a feature specific to GDScript and not Godot scripting in general; From 5f99fcb9fb33b8c596eda0a5ca8a5a9520d66e1f Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 17 Apr 2020 23:05:51 +0200 Subject: [PATCH 03/27] Add a Tween cheatsheet image Taken from https://github.com/wandomPewlin/godotTweeningCheatSheet with the author's permission. The image isn't referenced in this repository, but will be referenced in the Tween class reference. --- img/tween_cheatsheet.png | Bin 0 -> 151382 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/tween_cheatsheet.png diff --git a/img/tween_cheatsheet.png b/img/tween_cheatsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..e731b4991014ec6a224c0c94044913eaf13b0392 GIT binary patch literal 151382 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 MlvR_dld=f;Uk>6()Bpeg literal 0 HcmV?d00001 From e7e869afe51afd82e7767fc2eb9066400f48a218 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sat, 18 Apr 2020 15:09:19 +0200 Subject: [PATCH 04/27] Warn about outstanding bugs in the HTML5 export when running on iOS --- getting_started/workflow/export/exporting_for_web.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/getting_started/workflow/export/exporting_for_web.rst b/getting_started/workflow/export/exporting_for_web.rst index 595862ff8..01a9222de 100644 --- a/getting_started/workflow/export/exporting_for_web.rst +++ b/getting_started/workflow/export/exporting_for_web.rst @@ -20,13 +20,18 @@ in the user's browser. Use ``python -m http.server`` with Python 3 to serve the current working directory at ``http://localhost:8000``. +.. attention:: `There are significant bugs when running HTML5 projects on iOS `__ + (regardless of the browser). We recommend using + :ref:`iOS' native export functionality ` + instead, as it will also result in better performance. + WebGL 2 ------- Until the *OpenGL ES 3* renderer is removed from Godot in favor of *Vulkan*, HTML5 export uses *WebGL 2* when the *GLES3* option is selected. -.. warning:: Usage of WebGL 2 is not recommended due to its expected removal +.. warning:: Using WebGL 2 is not recommended due to its expected removal from Godot without replacement. WebGL 2 is not supported in all browsers. **Firefox** and From 544f4c4c93553a2bc9b3347b4a4437b4b858461c Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 21 Feb 2020 22:09:45 +0100 Subject: [PATCH 05/27] Add instant.page to speed up page loading instant.page prefetches pages when the user hovers links for more than 65 milliseconds. This can be used to make navigation feel significantly faster. Note that this will have no effect in Firefox when using uBlock Origin, as it forcibly disables prefetching. --- _static/js/custom.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/_static/js/custom.js b/_static/js/custom.js index 81803d85a..d43fed6b6 100644 --- a/_static/js/custom.js +++ b/_static/js/custom.js @@ -201,4 +201,13 @@ $(document).ready(() => { registerSidebarObserver(() => { registerOnScrollEvent(mediaQuery); }); + + // Load instant.page to prefetch pages upon hovering. This makes navigation feel + // snappier. The script is dynamically appended as Read the Docs doesn't have + // a way to add scripts with a "module" attribute. + const instantPageScript = document.createElement('script'); + instantPageScript.toggleAttribute('module'); + /*! instant.page v3.0.0 - (C) 2019 Alexandre Dieulot - https://instant.page/license */ + instantPageScript.innerText = 'let t,e;const n=new Set,o=document.createElement("link"),s=o.relList&&o.relList.supports&&o.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype,i="instantAllowQueryString"in document.body.dataset,r="instantAllowExternalLinks"in document.body.dataset,a="instantWhitelist"in document.body.dataset;let c=65,d=!1,l=!1,u=!1;if("instantIntensity"in document.body.dataset){const t=document.body.dataset.instantIntensity;if("mousedown"==t.substr(0,"mousedown".length))d=!0,"mousedown-only"==t&&(l=!0);else if("viewport"==t.substr(0,"viewport".length))navigator.connection&&(navigator.connection.saveData||navigator.connection.effectiveType.includes("2g"))||("viewport"==t?document.documentElement.clientWidth*document.documentElement.clientHeight<45e4&&(u=!0):"viewport-all"==t&&(u=!0));else{const e=parseInt(t);isNaN(e)||(c=e)}}if(s){const n={capture:!0,passive:!0};if(l||document.addEventListener("touchstart",function(t){e=performance.now();const n=t.target.closest("a");if(!f(n))return;h(n.href)},n),d?document.addEventListener("mousedown",function(t){const e=t.target.closest("a");if(!f(e))return;h(e.href)},n):document.addEventListener("mouseover",function(n){if(performance.now()-e<1100)return;const o=n.target.closest("a");if(!f(o))return;o.addEventListener("mouseout",m,{passive:!0}),t=setTimeout(()=>{h(o.href),t=void 0},c)},n),u){let t;(t=window.requestIdleCallback?t=>{requestIdleCallback(t,{timeout:1500})}:t=>{t()})(()=>{const t=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const n=e.target;t.unobserve(n),h(n.href)}})});document.querySelectorAll("a").forEach(e=>{f(e)&&t.observe(e)})})}}function m(e){e.relatedTarget&&e.target.closest("a")==e.relatedTarget.closest("a")||t&&(clearTimeout(t),t=void 0)}function f(t){if(t&&t.href&&(!a||"instant"in t.dataset)&&(r||t.origin==location.origin||"instant"in t.dataset)&&["http:","https:"].includes(t.protocol)&&("http:"!=t.protocol||"https:"!=location.protocol)&&(i||!t.search||"instant"in t.dataset)&&!(t.hash&&t.pathname+t.search==location.pathname+location.search||"noInstant"in t.dataset))return!0}function h(t){if(n.has(t))return;const e=document.createElement("link");e.rel="prefetch",e.href=t,document.head.appendChild(e),n.add(t)}'; + document.head.appendChild(instantPageScript); }); From f361118a8f9fca3b445c6396c4683c609293a7c6 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 22 Apr 2020 16:25:31 +0200 Subject: [PATCH 06/27] Install dependencies from `requirements.txt` when using virtualenv --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 0110f2222..f63bb7644 100644 --- a/README.md +++ b/README.md @@ -109,8 +109,7 @@ Execute this from the root folder of this repository: ```sh virtualenv --system-site-packages env/ . env/bin/activate -pip3 install sphinx -pip3 install sphinx_rtd_theme +pip install -r requirements.txt ``` Then do `make html` like above. From c2aeabbd499d7945fb7afb1842b9feb524bca919 Mon Sep 17 00:00:00 2001 From: Owen Merkling <4662355+omerkling@users.noreply.github.com> Date: Wed, 22 Apr 2020 15:13:35 -0600 Subject: [PATCH 07/27] Point getting sources to pull request workflow Potential contributors can land on the building instructions before the PR instructions. --- development/compiling/getting_source.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/development/compiling/getting_source.rst b/development/compiling/getting_source.rst index 16a1a864d..3c048fdca 100644 --- a/development/compiling/getting_source.rst +++ b/development/compiling/getting_source.rst @@ -15,6 +15,9 @@ The source code is available on `GitHub `_ and while you can manually download it via the website, in general you want to do it via the ``git`` version control system. +If you are compiling in order to make contributions or pull requests, you should +follow the instructions for the :ref:`pull request workflow `. + If you don't know much about ``git`` yet, there are a great number of `tutorials `__ available on various websites. From df61fffe1b03772ba566edda82e31ce8dce3a969 Mon Sep 17 00:00:00 2001 From: skyace65 Date: Wed, 22 Apr 2020 14:18:11 -0400 Subject: [PATCH 08/27] Add debug instructions for VSCode --- .../scripting/c_sharp/c_sharp_basics.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/getting_started/scripting/c_sharp/c_sharp_basics.rst b/getting_started/scripting/c_sharp/c_sharp_basics.rst index 2e2e74024..a14cf27eb 100644 --- a/getting_started/scripting/c_sharp/c_sharp_basics.rst +++ b/getting_started/scripting/c_sharp/c_sharp_basics.rst @@ -294,3 +294,19 @@ Configuring VS 2019 for debugging 5. Run the game in Godot. It should hang at the Godot splash screen while it waits for your debugger to attach. 6. In VS 2019, open your project and choose Extensions --> Mono --> Attach to Mono Debugger. + +Configuring Visual Studio Code for debugging +-------------------------------------------- + +To configure Visual Studio Code for debugging open up a project in Godot. Click on Project +and open the project settings. Scroll down and click on Debugger Agent under the Mono +category. Then turn on the setting "wait for debugger." Next, copy the port number +and open up Visual Studio Code. + +You need to download the Mono Debug extension from Microsoft. Then open the Godot +project folder. Go to the run tab and click on create a launch.json file. Select C# +Mono from the dropdown menu. When the launch.json file is automatically opened, +change the port number to the number you copied previously and save the file. On the +run tab, switch the run setting from launch to attach. Whenever you want to debug, +make sure Wait for Debugger is turned on in Godot, run the project, and run the +debugger in Visual Studio Code. From a70630b92463cf5bf4d4e28b7153b362daf798b4 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 24 Apr 2020 11:54:47 +0200 Subject: [PATCH 09/27] Fix duplicate colon in Exporting for Android --- getting_started/workflow/export/exporting_for_android.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_started/workflow/export/exporting_for_android.rst b/getting_started/workflow/export/exporting_for_android.rst index 5781ab8f4..98a8af325 100644 --- a/getting_started/workflow/export/exporting_for_android.rst +++ b/getting_started/workflow/export/exporting_for_android.rst @@ -76,7 +76,7 @@ Launcher icons are used by Android launcher apps to represent your application t There are two types of icons required by Godot: -- **Main Icon:**: The "classic" icon. This will be used on all Android versions up to Android 8 (Oreo), exclusive. Must be at least 192×192 px. +- **Main Icon:** The "classic" icon. This will be used on all Android versions up to Android 8 (Oreo), exclusive. Must be at least 192×192 px. - **Adaptive Icons:** Starting from Android 8 (inclusive), `Adaptive Icons `_ were introduced. Applications will need to include separate background and foreground icons to have a native look. The user's launcher application will control the icon's animation and masking. Must be at least 432×432 px. .. seealso:: It's important to adhere to some rules when designing adaptive icons. `Google Design has provided a nice article `_ that helps to understand those rules and some of the capabilities of adaptive icons. From 410c99ae96fde09f786acbeacfe14b7734d3c4ef Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Tue, 25 Feb 2020 20:08:20 +0100 Subject: [PATCH 10/27] Update Editor icons information to follow changes in the `master` branch See https://github.com/godotengine/godot/pull/36513. --- development/editor/creating_icons.rst | 60 ++++++++++----------------- 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/development/editor/creating_icons.rst b/development/editor/creating_icons.rst index 8a117b902..3c7592c5d 100644 --- a/development/editor/creating_icons.rst +++ b/development/editor/creating_icons.rst @@ -11,47 +11,33 @@ to improve the user experience. Creating icons ~~~~~~~~~~~~~~ -In order to create new icons, you first need a vector graphics editor installed. -For instance, you can use the open-source `Inkscape `_ editor. +To create new icons, you first need a vector graphics editor installed. +For instance, you can use the open source `Inkscape `_ editor. -Clone the ``godot-design`` repository containing all the original editor icons: +Clone the ``godot`` repository containing all the editor icons: .. code-block:: bash - git clone https://github.com/godotengine/godot-design + git clone https://github.com/godotengine/godot -The icons must be created in a vector graphics editor in ``svg`` format. You -can use ``engine/icons/inkscape_template.svg`` with default icon properties -already set up. +The icons must be created in a vector graphics editor in SVG format. There are +two main requirements to follow: -Once you're satisfied with the icon's design, save the icon in -``engine/icons/svg/`` folder. But in order for the engine to automatically -pick up the icons, each icon's filename: +- Icons must be 16×16. In Inkscape, you can configure the document size in + **File > Document Properties**. +- Lines should be snapped to pixels whenever possible to remain crisp at lower DPI. + You can create a 16×16 grid in Inkscape to make this easier. -1. Must be prefixed with ``icon_``. - -2. ``PascalCase`` name should be converted to ``snake_case``, so words - are separated by ``_`` whenever case changes, and uppercase acronyms must - also have all letters, numbers, and special characters separated as distinct - words. Some examples: - - +--------------------+----------------------------------+ - | Name | Filename | - +====================+==================================+ - | ``Polygon2D`` | ``icon_polygon_2_d.svg`` | - +--------------------+----------------------------------+ - | ``CSGPolygon`` | ``icon_c_s_g_polygon.svg`` | - +--------------------+----------------------------------+ - | ``CPUParticles2D`` | ``icon_c_p_u_particles_2_d.svg`` | - +--------------------+----------------------------------+ - | ``C#`` | ``icon_c_#.svg`` | - +--------------------+----------------------------------+ +Once you're satisfied with the icon's design, save the icon in the cloned +repository's ``editor/icons`` folder. The icon name should match the intended +name in a case-sensitive manner. For example, to create an icon for +CPUParticles2D, name the file ``CPUParticles2D.svg``. Icon optimization ~~~~~~~~~~~~~~~~~ -Because the editor renders the ``svg``'s at runtime, they need to be small -in size, so they can be efficiently parsed. Editor icons must be first +Because the editor renders SVGs once at load time, they need to be small +in size so they can be efficiently parsed. Editor icons must be first optimized before being added to the engine, to do so: 1. Add them to the ``engine/icons/svg`` folder. @@ -69,10 +55,8 @@ Integrating and sharing the icons ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you're contributing to the engine itself, you should make a pull request to -add optimized icons to ``godot/editor/icons`` in the main repository. Recompile -the engine to make sure it does pick up new icons for classes. Once merged, -don't forget to add the original version of the icons to the ``godot-design`` -repository so that the icon can be improved upon by other contributors. +add optimized icons to ``editor/icons`` in the main repository. Recompile the +engine to make it pick up new icons for classes. It's also possible to create custom icons within a module. If you're creating your own module and don't plan to integrate it with Godot, you don't need to @@ -89,10 +73,10 @@ If icons don't appear in the editor make sure that: 1. Each icon's filename matches the naming requirement as described previously. -2. ``modules/svg`` is enabled (should be enabled by default). Without it, icons - won't appear in the editor at all. +2. ``modules/svg`` is enabled (it should be enabled by default). Without it, + icons won't appear in the editor at all. -References: -~~~~~~~~~~~ +References +~~~~~~~~~~ - `editor/icons `__ From 8eb869f61e19b600e91a34cb2f10148538792989 Mon Sep 17 00:00:00 2001 From: tanchar Date: Sat, 25 Apr 2020 09:49:06 +0200 Subject: [PATCH 11/27] remove duplicate keyboard shortcut - Complete Symbol was present twice - The correct shortcut on mac is Ctrl + Space ; Cmd + Space is typically used to open the mac spotlight search - Clone Down was present twice --- getting_started/editor/default_key_mapping.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/getting_started/editor/default_key_mapping.rst b/getting_started/editor/default_key_mapping.rst index 668f68d63..7eea9ef41 100644 --- a/getting_started/editor/default_key_mapping.rst +++ b/getting_started/editor/default_key_mapping.rst @@ -250,14 +250,10 @@ Text Editor +---------------------------+--------------------------+----------------------------+-------------------------------------------------+ | Fold/Unfold Line | :kbd:`Alt + F` | :kbd:`Alt + F` | ``script_text_editor/toggle_fold_line`` | +---------------------------+--------------------------+----------------------------+-------------------------------------------------+ -| Clone Down | :kbd:`Ctrl + Shift + C` | :kbd:`Cmd + Shift + C` | ``script_text_editor/clone_down`` | +| Clone Down | :kbd:`Ctrl + D` | :kbd:`Cmd + Shift + C` | ``script_text_editor/clone_down`` | +---------------------------+--------------------------+----------------------------+-------------------------------------------------+ | Complete Symbol | :kbd:`Ctrl + Space` | :kbd:`Ctrl + Space` | ``script_text_editor/complete_symbol`` | +---------------------------+--------------------------+----------------------------+-------------------------------------------------+ -| Clone Down | :kbd:`Ctrl + D` | :kbd:`Cmd + D` | ``script_text_editor/clone_down`` | -+---------------------------+--------------------------+----------------------------+-------------------------------------------------+ -| Complete Symbol | :kbd:`Ctrl + Space` | :kbd:`Cmd + Space` | ``script_text_editor/complete_symbol`` | -+---------------------------+--------------------------+----------------------------+-------------------------------------------------+ | Evaluate Selection | :kbd:`Ctrl + Shift + E` | :kbd:`Cmd + Shift + E` | ``script_text_editor/evaluate_selection`` | +---------------------------+--------------------------+----------------------------+-------------------------------------------------+ | Trim Trailing Whitespace | :kbd:`Ctrl + Alt + T` | :kbd:`Cmd + Alt + T` | ``script_text_editor/trim_trailing_whitespace`` | From 7e3c39641ac1299f61ddb693956ea722f0c0b90c Mon Sep 17 00:00:00 2001 From: Andrii Doroshenko Date: Sat, 25 Apr 2020 13:28:55 +0300 Subject: [PATCH 12/27] Document script templates creation and management (#3439) --- .../scripting/creating_script_templates.rst | 156 ++++++++++++++++++ .../img/script_create_dialog_templates.png | Bin 0 -> 19087 bytes getting_started/scripting/index.rst | 1 + 3 files changed, 157 insertions(+) create mode 100644 getting_started/scripting/creating_script_templates.rst create mode 100644 getting_started/scripting/img/script_create_dialog_templates.png diff --git a/getting_started/scripting/creating_script_templates.rst b/getting_started/scripting/creating_script_templates.rst new file mode 100644 index 000000000..2f0004e68 --- /dev/null +++ b/getting_started/scripting/creating_script_templates.rst @@ -0,0 +1,156 @@ +.. _doc_creating_script_templates: + +Creating script templates +========================= + +Godot provides a way to use script templates as seen in the +``Script Create Dialog`` while creating a new script: + +.. image:: img/script_create_dialog_templates.png + +A set of default script templates is provided by default, but it's also possible +to modify existing and create new ones, both per project and the editor. + +Locating the templates +---------------------- + +There are two places where templates can be managed. + +Editor-defined templates +~~~~~~~~~~~~~~~~~~~~~~~~ + +These are available globally throughout any project. The location of these +templates are determined per each OS: + +- Windows: ``%APPDATA%\Godot\script_templates\`` +- Linux: ``$HOME/.local/share/godot/script_templates/`` +- macOS: ``$HOME/Library/Application Support/Godot/script_templates/`` + +If no ``script_templates`` is detected, Godot will create a default set of +built-in templates automatically, so this logic can be used to reset the default +templates in case you've accidentally overwritten them. + +Project-defined templates +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The default path to search for templates is the +``res://script_templates/`` directory. The path can be changed by configuring +the ``editor/script_templates_search_path`` setting in the +:ref:`ProjectSettings `, both via code and the editor. + +If no ``script_templates`` directory is found within a project, it is simply +ignored. + +Language support and overriding behavior +---------------------------------------- + +Depending on whether a particular language implements a way to generate scripts +out of templates, it's possible to create a template which can be recognized by +that language according to template's file extension. For GDScript and C#, the +extensions must be ``gd`` and ``cs`` respectively. + +.. note:: The script templates have the same extension as the regular script + files. This may lead to an issue of a script parser treating those templates as + actual scripts within a project. To avoid this, make sure to ignore the + directory containing them by creating a ``.gdignore`` file. The directory won't be + visible throughout the project's filesystem anymore, yet the templates can be + modified by an external text editor anytime. + +The built-in editor templates are automatically shadowed by the project-specific +templates given both scripts have the same filename. + +Default template +---------------- + +The ``Default`` template is always generated dynamically per language and cannot +be configured nor overridden, but you can use these as the base for creating +other templates. + +.. tabs:: + + .. code-tab:: gdscript GDScript + + extends %BASE% + + + # Declare member variables here. Examples: + # var a%INT_TYPE% = 2 + # var b%STRING_TYPE% = "text" + + + # Called when the node enters the scene tree for the first time. + func _ready()%VOID_RETURN%: + pass # Replace with function body. + + + # Called every frame. 'delta' is the elapsed time since the previous frame. + #func _process(delta%FLOAT_TYPE%)%VOID_RETURN%: + # pass + + + .. code-tab:: csharp + + using Godot; + using System; + + public class %CLASS% : %BASE% + { + // Declare member variables here. Examples: + // private int a = 2; + // private string b = "text"; + + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + + } + + // // Called every frame. 'delta' is the elapsed time since the previous frame. + // public override void _Process(float delta) + // { + // + // } + } + +List of template placeholders +----------------------------- + +The following describes the complete list of built-in template placeholders +which are currently implemented. + +Base placeholders +~~~~~~~~~~~~~~~~~ + ++-------------+----------------------------------------------------------------+ +| Placeholder | Description | ++=============+================================================================+ +| ``%CLASS%`` | The name of the new class (used in C# only). | ++-------------+----------------------------------------------------------------+ +| ``%BASE%`` | The base type a new script inherits from. | ++-------------+----------------------------------------------------------------+ +| ``%TS%`` | Indentation placeholder. The exact type and number of | +| | whitespace characters used for indentation is determined by | +| | the ``text_editor/indent/type`` and ``text_editor/indent/size``| +| | settings in the :ref:`EditorSettings ` | +| | respectively. | ++-------------+----------------------------------------------------------------+ + +Type placeholders +~~~~~~~~~~~~~~~~~ + +These are only relevant for GDScript with static typing. Whether these +placeholders are actually replaced is determined by the +``text_editor/completion/add_type_hints`` setting in the +:ref:`EditorSettings `. + ++-------------------+--------------+ +| Placeholder | Value | ++===================+==============+ +| ``%INT_TYPE%`` | ``: int`` | ++-------------------+--------------+ +| ``%STRING_TYPE%`` | ``: String`` | ++-------------------+--------------+ +| ``%FLOAT_TYPE%`` | ``: float`` | ++-------------------+--------------+ +| ``%VOID_RETURN%`` | ``-> void`` | ++-------------------+--------------+ diff --git a/getting_started/scripting/img/script_create_dialog_templates.png b/getting_started/scripting/img/script_create_dialog_templates.png new file mode 100644 index 0000000000000000000000000000000000000000..34ea005b651495e7a149b523e5f0459a5db874e2 GIT binary patch literal 19087 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 Date: Sat, 25 Apr 2020 14:39:45 +0200 Subject: [PATCH 13/27] Link back to the Godot website on the documentation homepage This closes #3435. --- index.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/index.rst b/index.rst index b1a5d4c41..141448657 100644 --- a/index.rst +++ b/index.rst @@ -26,10 +26,11 @@ Godot Docs – *master* branch the "latest" (development) branch, but should be suitable to learn how to use stable Godot releases nevertheless. -Welcome to the official documentation of Godot Engine, the free and open source -community-driven 2D and 3D game engine! If you are new to this documentation, -we recommend that you read the :ref:`introduction page ` to -get an overview of what this documentation has to offer. +Welcome to the official documentation of `Godot Engine `__, +the free and open source community-driven 2D and 3D game engine! If you are new +to this documentation, we recommend that you read the +:ref:`introduction page ` to get an overview of what this +documentation has to offer. The table of contents below and in the sidebar should let you easily access the documentation for your topic of interest. You can also use the search function From 6af982bc47ef51678f2335526eeb22d818d0a649 Mon Sep 17 00:00:00 2001 From: Daniel Nimmervoll Date: Sat, 25 Apr 2020 17:31:08 +0200 Subject: [PATCH 14/27] Fix typo in c# script of bouncing/reflecting part (#3443) --- tutorials/physics/using_kinematic_body_2d.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/physics/using_kinematic_body_2d.rst b/tutorials/physics/using_kinematic_body_2d.rst index 7fce0a9a9..db95256c7 100644 --- a/tutorials/physics/using_kinematic_body_2d.rst +++ b/tutorials/physics/using_kinematic_body_2d.rst @@ -347,11 +347,11 @@ uses the mouse pointer. Here is the code for the Player, using ``move_and_slide( _velocity = new Vector2(); if (Input.IsActionPressed("backward")) { - _velocity = new Vector2(-speed/3, 0).Rotated(Rotation); + _velocity = new Vector2(-Speed/3, 0).Rotated(Rotation); } if (Input.IsActionPressed("forward")) { - _velocity = new Vector2(speed, 0).Rotated(Rotation); + _velocity = new Vector2(Speed, 0).Rotated(Rotation); } if (Input.IsActionPressed("mouse_click")) { From c3e05904a07c8d8e364b98a140a39082a4b82340 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sat, 25 Apr 2020 12:07:11 +0200 Subject: [PATCH 15/27] Improve the shader reference table formatting This also adds a note about the `pow()` result being undefined in certain conditions. --- .../shading_reference/shading_language.rst | 496 +++++++++--------- 1 file changed, 248 insertions(+), 248 deletions(-) diff --git a/tutorials/shading/shading_reference/shading_language.rst b/tutorials/shading/shading_reference/shading_language.rst index 89c47388c..3031e64fc 100644 --- a/tutorials/shading/shading_reference/shading_language.rst +++ b/tutorials/shading/shading_reference/shading_language.rst @@ -213,9 +213,9 @@ They can be initialized at the beginning like: .. code-block:: glsl - float float_arr[3] = float[3] ( 1.0, 0.5, 0.0 ); // first constructor + float float_arr[3] = float[3] (1.0, 0.5, 0.0); // first constructor - int int_arr[3] = int[] ( 2, 1, 0 ); // second constructor + int int_arr[3] = int[] (2, 1, 0); // second constructor vec2 vec2_arr[3] = { vec2(1.0, 1.0), vec2(0.5, 0.5), vec2(0.0, 0.0) }; // third constructor @@ -226,7 +226,7 @@ You can declare multiple arrays (even with different sizes) in one expression: .. code-block:: glsl float a[3] = float[3] (1.0, 0.5, 0.0), - b[2] = {1.0, 0.5}, + b[2] = { 1.0, 0.5 }, c[] = { 0.7 }, d = 0.0, e[5]; @@ -363,33 +363,33 @@ Operators Godot shading language supports the same set of operators as GLSL ES 3.0. Below is the list of them in precedence order: -+-------------+-----------------------+--------------------+ -| Precedence | Class | Operator | -+-------------+-----------------------+--------------------+ -| 1 (highest) | parenthetical grouping| **()** | -+-------------+-----------------------+--------------------+ -| 2 | unary | **+, -, !, ~** | -+-------------+-----------------------+--------------------+ -| 3 | multiplicative | **/, \*, %** | -+-------------+-----------------------+--------------------+ -| 4 | additive | **+, -** | -+-------------+-----------------------+--------------------+ -| 5 | bit-wise shift | **<<, >>** | -+-------------+-----------------------+--------------------+ -| 6 | relational | **<, >, <=, >=** | -+-------------+-----------------------+--------------------+ -| 7 | equality | **==, !=** | -+-------------+-----------------------+--------------------+ -| 8 | bit-wise and | **&** | -+-------------+-----------------------+--------------------+ -| 9 | bit-wise exclusive or | **^** | -+-------------+-----------------------+--------------------+ -| 10 | bit-wise inclusive or | **|** | -+-------------+-----------------------+--------------------+ -| 11 | logical and | **&&** | -+-------------+-----------------------+--------------------+ -| 12 (lowest) | logical inclusive or | **||** | -+-------------+-----------------------+--------------------+ ++-------------+------------------------+------------------+ +| Precedence | Class | Operator | ++-------------+------------------------+------------------+ +| 1 (highest) | parenthetical grouping | **()** | ++-------------+------------------------+------------------+ +| 2 | unary | **+, -, !, ~** | ++-------------+------------------------+------------------+ +| 3 | multiplicative | **/, \*, %** | ++-------------+------------------------+------------------+ +| 4 | additive | **+, -** | ++-------------+------------------------+------------------+ +| 5 | bit-wise shift | **<<, >>** | ++-------------+------------------------+------------------+ +| 6 | relational | **<, >, <=, >=** | ++-------------+------------------------+------------------+ +| 7 | equality | **==, !=** | ++-------------+------------------------+------------------+ +| 8 | bit-wise AND | **&** | ++-------------+------------------------+------------------+ +| 9 | bit-wise exclusive OR | **^** | ++-------------+------------------------+------------------+ +| 10 | bit-wise inclusive OR | **|** | ++-------------+------------------------+------------------+ +| 11 | logical AND | **&&** | ++-------------+------------------------+------------------+ +| 12 (lowest) | logical inclusive OR | **||** | ++-------------+------------------------+------------------+ Flow control ------------ @@ -581,25 +581,25 @@ It's important to understand that textures that are supplied as color require hi Full list of hints below: -+----------------+-------------------------------+-------------------------------------+ -| Type | Hint | Description | -+================+===============================+=====================================+ -| **vec4** | hint_color | Used as color | -+----------------+-------------------------------+-------------------------------------+ -| **int, float** | hint_range(min,max [,step] ) | Used as range (with min/max/step) | -+----------------+-------------------------------+-------------------------------------+ -| **sampler2D** | hint_albedo | Used as albedo color, default white | -+----------------+-------------------------------+-------------------------------------+ -| **sampler2D** | hint_black_albedo | Used as albedo color, default black | -+----------------+-------------------------------+-------------------------------------+ -| **sampler2D** | hint_normal | Used as normalmap | -+----------------+-------------------------------+-------------------------------------+ -| **sampler2D** | hint_white | As value, default to white. | -+----------------+-------------------------------+-------------------------------------+ -| **sampler2D** | hint_black | As value, default to black | -+----------------+-------------------------------+-------------------------------------+ -| **sampler2D** | hint_aniso | As flowmap, default to right. | -+----------------+-------------------------------+-------------------------------------+ ++----------------+-----------------------------+-------------------------------------+ +| Type | Hint | Description | ++================+=============================+=====================================+ +| **vec4** | hint_color | Used as color | ++----------------+-----------------------------+-------------------------------------+ +| **int, float** | hint_range(min,max [,step]) | Used as range (with min/max/step) | ++----------------+-----------------------------+-------------------------------------+ +| **sampler2D** | hint_albedo | Used as albedo color, default white | ++----------------+-----------------------------+-------------------------------------+ +| **sampler2D** | hint_black_albedo | Used as albedo color, default black | ++----------------+-----------------------------+-------------------------------------+ +| **sampler2D** | hint_normal | Used as normalmap | ++----------------+-----------------------------+-------------------------------------+ +| **sampler2D** | hint_white | As value, default to white. | ++----------------+-----------------------------+-------------------------------------+ +| **sampler2D** | hint_black | As value, default to black | ++----------------+-----------------------------+-------------------------------------+ +| **sampler2D** | hint_aniso | As flowmap, default to right. | ++----------------+-----------------------------+-------------------------------------+ GDScript uses different variable types than GLSL does, so when passing variables from GDScript to shaders, Godot converts the type automatically. Below is a table of the corresponding types: @@ -645,202 +645,202 @@ When vec_type (float), vec_int_type, vec_uint_type, vec_bool_type nomenclature i .. note:: For a list of the functions that are not available in the GLES2 backend, please see the :ref:`Differences between GLES2 and GLES3 doc `. -+----------------------------------------------------------------------------+--------------------------------------------------+ -| Function | Description | -+============================================================================+==================================================+ -| vec_type **radians** ( vec_type degrees ) | Convert degrees to radians | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **degrees** ( vec_type radians ) | Convert radians to degrees | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **sin** ( vec_type x ) | Sine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **cos** ( vec_type x ) | Cosine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **tan** ( vec_type x ) | Tangent | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **asin** ( vec_type x ) | Arc-Sine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **acos** ( vec_type x ) | Arc-Cosine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **atan** ( vec_type y_over_x ) | Arc-Tangent | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **atan** ( vec_type y, vec_type x ) | Arc-Tangent to convert vector to angle | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **sinh** ( vec_type x ) | Hyperbolic-Sine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **cosh** ( vec_type x ) | Hyperbolic-Cosine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **tanh** ( vec_type x ) | Hyperbolic-Tangent | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **asinh** ( vec_type x ) | Inverse-Hyperbolic-Sine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **acosh** ( vec_type x ) | Inverse-Hyperbolic-Cosine | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **atanh** ( vec_type x ) | Inverse-Hyperbolic-Tangent | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **pow** ( vec_type x, vec_type y ) | Power | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **exp** ( vec_type x ) | Base-e Exponential | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **exp2** ( vec_type x ) | Base-2 Exponential | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **log** ( vec_type x ) | Natural Logarithm | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **log2** ( vec_type x ) | Base-2 Logarithm | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **sqrt** ( vec_type x ) | Square Root | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **inversesqrt** ( vec_type x ) | Inverse Square Root | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **abs** ( vec_type x ) | Absolute | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec_type **abs** ( ivec_type x ) | Absolute | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **sign** ( vec_type x ) | Sign | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec_type **sign** ( ivec_type x ) | Sign | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **floor** ( vec_type x ) | Floor | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **round** ( vec_type x ) | Round | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **roundEven** ( vec_type x ) | Round nearest even | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **trunc** ( vec_type x ) | Truncation | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **ceil** ( vec_type x ) | Ceil | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **fract** ( vec_type x ) | Fractional | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **mod** ( vec_type x, vec_type y ) | Remainder | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **mod** ( vec_type x , float y ) | Remainder | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **modf** ( vec_type x, out vec_type i ) | Fractional of x, with i has integer part | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **min** ( vec_type a, vec_type b ) | Minimum | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **max** ( vec_type a, vec_type b ) | Maximum | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **clamp** ( vec_type x, vec_type min, vec_type max ) | Clamp to Min-Max | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **mix** ( float a, float b, float c ) | Linear Interpolate | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **mix** ( vec_type a, vec_type b, float c ) | Linear Interpolate (Scalar Coef.) | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **mix** ( vec_type a, vec_type b, vec_type c ) | Linear Interpolate (Vector Coef.) | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **mix** ( vec_type a, vec_type b, bvec_type c ) | Linear Interpolate (Boolean-Vector Selection) | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **step** ( vec_type a, vec_type b ) | ``b[i] < a[i] ? 0.0 : 1.0`` | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **step** ( float a, vec_type b) | ``b[i] < a ? 0.0 : 1.0`` | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **smoothstep** ( vec_type a, vec_type b, vec_type c ) | Hermite Interpolate | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **smoothstep** ( float a, float b, vec_type c ) | Hermite Interpolate | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **isnan** ( vec_type x ) | Scalar, or vector component being NaN | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **isinf** ( vec_type x ) | Scalar, or vector component being INF | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec_type **floatBitsToInt** ( vec_type x ) | Float->Int bit copying, no conversion | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| uvec_type **floatBitsToUint** ( vec_type x ) | Float->UInt bit copying, no conversion | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **intBitsToFloat** ( ivec_type x ) | Int->Float bit copying, no conversion | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **uintBitsToFloat** ( uvec_type x ) | UInt->Float bit copying, no conversion | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| float **length** ( vec_type x ) | Vector Length | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| float **distance** ( vec_type a, vec_type b ) | Distance between vectors i.e ``length(a - b)`` | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| float **dot** ( vec_type a, vec_type b ) | Dot Product | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec3 **cross** ( vec3 a, vec3 b ) | Cross Product | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **normalize** ( vec_type x ) | Normalize to unit length | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec3 **reflect** ( vec3 I, vec3 N ) | Reflect | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec3 **refract** ( vec3 I, vec3 N, float eta ) | Refract | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **faceforward** ( vec_type N, vec_type I, vec_type Nref ) | If dot(Nref, I) < 0, return N, otherwise –N | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| mat_type **matrixCompMult** ( mat_type x, mat_type y ) | Matrix Component Multiplication | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| mat_type **outerProduct** ( vec_type column, vec_type row ) | Matrix Outer Product | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| mat_type **transpose** ( mat_type m ) | Transpose Matrix | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| float **determinant** ( mat_type m ) | Matrix Determinant | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| mat_type **inverse** ( mat_type m ) | Inverse Matrix | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **lessThan** ( vec_type x, vec_type y ) | Bool vector cmp on < int/uint/float vectors | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **greaterThan** ( vec_type x, vec_type y ) | Bool vector cmp on > int/uint/float vectors | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **lessThanEqual** ( vec_type x, vec_type y ) | Bool vector cmp on <= int/uint/float vectors | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **greaterThanEqual** ( vec_type x, vec_type y ) | Bool vector cmp on >= int/uint/float vectors | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **equal** ( vec_type x, vec_type y ) | Bool vector cmp on == int/uint/float vectors | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **notEqual** ( vec_type x, vec_type y ) | Bool vector cmp on != int/uint/float vectors | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bool **any** ( bvec_type x ) | Any component is ``true`` | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bool **all** ( bvec_type x ) | All components are ``true`` | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| bvec_type **not** ( bvec_type x ) | Invert boolean vector | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec2 **textureSize** ( sampler2D_type s, int lod ) | Get the size of a 2D texture | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec3 **textureSize** ( sampler2DArray_type s, int lod ) | Get the size of a 2D texture array | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec3 **textureSize** ( sampler3D s, int lod ) | Get the size of a 3D texture | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| ivec2 **textureSize** ( samplerCube s, int lod ) | Get the size of a Cube texture | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **texture** ( sampler2D_type s, vec2 uv [, float bias] ) | Perform a 2D texture read | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **texture** ( sampler2DArray_type s, vec3 uv [, float bias] ) | Perform a 2D texture array read | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **texture** ( sampler3D_type s, vec3 uv [, float bias] ) | Perform a 3D texture read | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4 **texture** ( samplerCube s, vec3 uv [, float bias] ) | Perform an Cube texture read | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureProj** ( sampler2D_type s, vec3 uv [, float bias] ) | Perform a 2D texture read with projection | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureProj** ( sampler2D_type s, vec4 uv [, float bias] ) | Perform a 2D texture read with projection | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureProj** ( sampler3D_type s, vec4 uv [, float bias] ) | Perform a 3D texture read with projection | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureLod** ( sampler2D_type s, vec2 uv, float lod ) | Perform a 2D texture read at custom mipmap | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureLod** ( sampler2DArray_type s, vec3 uv, float lod ) | Perform a 2D texture array read at custom mipmap | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureLod** ( sampler3D_type s, vec3 uv, float lod ) | Perform a 3D texture read at custom mipmap | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4 **textureLod** ( samplerCube s, vec3 uv, float lod ) | Perform a 3D texture read at custom mipmap | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureProjLod** ( sampler2D_type s, vec3 uv, float lod ) | Perform a 2D texture read with projection/lod | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureProjLod** ( sampler2D_type s, vec4 uv, float lod ) | Perform a 2D texture read with projection/lod | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **textureProjLod** ( sampler3D_type s, vec4 uv, float lod ) | Perform a 3D texture read with projection/lod | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **texelFetch** ( sampler2D_type s, ivec2 uv, int lod ) | Fetch a single texel using integer coords | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **texelFetch** ( sampler2DArray_type s, ivec3 uv, int lod ) | Fetch a single texel using integer coords | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec4_type **texelFetch** ( sampler3D_type s, ivec3 uv, int lod ) | Fetch a single texel using integer coords | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **dFdx** ( vec_type p ) | Derivative in x using local differencing | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **dFdy** ( vec_type p ) | Derivative in y using local differencing | -+----------------------------------------------------------------------------+--------------------------------------------------+ -| vec_type **fwidth** ( vec_type p ) | Sum of absolute derivative in x and y | -+----------------------------------------------------------------------------+--------------------------------------------------+ ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| Function | Description | ++========================================================================+===============================================================+ +| vec_type **radians** (vec_type degrees) | Convert degrees to radians | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **degrees** (vec_type radians) | Convert radians to degrees | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **sin** (vec_type x) | Sine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **cos** (vec_type x) | Cosine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **tan** (vec_type x) | Tangent | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **asin** (vec_type x) | Arcsine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **acos** (vec_type x) | Arccosine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **atan** (vec_type y_over_x) | Arctangent | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **atan** (vec_type y, vec_type x) | Arctangent to convert vector to angle | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **sinh** (vec_type x) | Hyperbolic sine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **cosh** (vec_type x) | Hyperbolic cosine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **tanh** (vec_type x) | Hyperbolic tangent | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **asinh** (vec_type x) | Inverse hyperbolic sine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **acosh** (vec_type x) | Inverse hyperbolic cosine | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **atanh** (vec_type x) | Inverse hyperbolic tangent | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **pow** (vec_type x, vec_type y) | Power (undefined if ``x`` < 0 or if ``x`` = 0 and ``y`` <= 0) | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **exp** (vec_type x) | Base-e exponential | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **exp2** (vec_type x) | Base-2 exponential | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **log** (vec_type x) | Natural logarithm | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **log2** (vec_type x) | Base-2 logarithm | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **sqrt** (vec_type x) | Square root | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **inversesqrt** (vec_type x) | Inverse square root | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **abs** (vec_type x) | Absolute | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec_type **abs** (ivec_type x) | Absolute | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **sign** (vec_type x) | Sign | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec_type **sign** (ivec_type x) | Sign | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **floor** (vec_type x) | Floor | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **round** (vec_type x) | Round | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **roundEven** (vec_type x) | Round to the nearest even number | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **trunc** (vec_type x) | Truncation | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **ceil** (vec_type x) | Ceil | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **fract** (vec_type x) | Fractional | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **mod** (vec_type x, vec_type y) | Remainder | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **mod** (vec_type x , float y) | Remainder | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **modf** (vec_type x, out vec_type i) | Fractional of ``x``, with ``i`` as integer part | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **min** (vec_type a, vec_type b) | Minimum | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **max** (vec_type a, vec_type b) | Maximum | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **clamp** (vec_type x, vec_type min, vec_type max) | Clamp to ``min..max`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **mix** (float a, float b, float c) | Linear interpolate | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **mix** (vec_type a, vec_type b, float c) | Linear interpolate (scalar coefficient) | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **mix** (vec_type a, vec_type b, vec_type c) | Linear interpolate (vector coefficient) | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **mix** (vec_type a, vec_type b, bvec_type c) | Linear interpolate (boolean-vector selection) | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **step** (vec_type a, vec_type b) | ``b[i] < a[i] ? 0.0 : 1.0`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **step** (float a, vec_type b) | ``b[i] < a ? 0.0 : 1.0`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **smoothstep** (vec_type a, vec_type b, vec_type c) | Hermite interpolate | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **smoothstep** (float a, float b, vec_type c) | Hermite interpolate | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **isnan** (vec_type x) | Returns ``true`` if scalar or vector component is ``NaN`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **isinf** (vec_type x) | Returns ``true`` if scalar or vector component is ``INF`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec_type **floatBitsToInt** (vec_type x) | Float->Int bit copying, no conversion | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| uvec_type **floatBitsToUint** (vec_type x) | Float->UInt bit copying, no conversion | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **intBitsToFloat** (ivec_type x) | Int->Float bit copying, no conversion | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **uintBitsToFloat** (uvec_type x) | UInt->Float bit copying, no conversion | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| float **length** (vec_type x) | Vector length | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| float **distance** (vec_type a, vec_type b) | Distance between vectors i.e ``length(a - b)`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| float **dot** (vec_type a, vec_type b) | Dot product | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec3 **cross** (vec3 a, vec3 b) | Cross croduct | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **normalize** (vec_type x) | Normalize to unit length | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec3 **reflect** (vec3 I, vec3 N) | Reflect | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec3 **refract** (vec3 I, vec3 N, float eta) | Refract | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **faceforward** (vec_type N, vec_type I, vec_type Nref) | If ``dot(Nref, I)`` < 0, return N, otherwise –N | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| mat_type **matrixCompMult** (mat_type x, mat_type y) | Matrix component multiplication | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| mat_type **outerProduct** (vec_type column, vec_type row) | Matrix outer product | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| mat_type **transpose** (mat_type m) | Transpose matrix | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| float **determinant** (mat_type m) | Matrix determinant | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| mat_type **inverse** (mat_type m) | Inverse matrix | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **lessThan** (vec_type x, vec_type y) | Bool vector comparison on < int/uint/float vectors | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **greaterThan** (vec_type x, vec_type y) | Bool vector comparison on > int/uint/float vectors | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **lessThanEqual** (vec_type x, vec_type y) | Bool vector comparison on <= int/uint/float vectors | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **greaterThanEqual** (vec_type x, vec_type y) | Bool vector comparison on >= int/uint/float vectors | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **equal** (vec_type x, vec_type y) | Bool vector comparison on == int/uint/float vectors | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **notEqual** (vec_type x, vec_type y) | Bool vector comparison on != int/uint/float vectors | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bool **any** (bvec_type x) | Any component is ``true`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bool **all** (bvec_type x) | All components are ``true`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| bvec_type **not** (bvec_type x) | Invert boolean vector | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec2 **textureSize** (sampler2D_type s, int lod) | Get the size of a 2D texture | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec3 **textureSize** (sampler2DArray_type s, int lod) | Get the size of a 2D texture array | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec3 **textureSize** (sampler3D s, int lod) | Get the size of a 3D texture | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| ivec2 **textureSize** (samplerCube s, int lod) | Get the size of a cubemap texture | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **texture** (sampler2D_type s, vec2 uv [, float bias]) | Perform a 2D texture read | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **texture** (sampler2DArray_type s, vec3 uv [, float bias]) | Perform a 2D texture array read | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **texture** (sampler3D_type s, vec3 uv [, float bias]) | Perform a 3D texture read | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4 **texture** (samplerCube s, vec3 uv [, float bias]) | Perform a cubemap texture read | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureProj** (sampler2D_type s, vec3 uv [, float bias]) | Perform a 2D texture read with projection | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureProj** (sampler2D_type s, vec4 uv [, float bias]) | Perform a 2D texture read with projection | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureProj** (sampler3D_type s, vec4 uv [, float bias]) | Perform a 3D texture read with projection | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureLod** (sampler2D_type s, vec2 uv, float lod) | Perform a 2D texture read at custom mipmap | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureLod** (sampler2DArray_type s, vec3 uv, float lod) | Perform a 2D texture array read at custom mipmap | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureLod** (sampler3D_type s, vec3 uv, float lod) | Perform a 3D texture read at custom mipmap | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4 **textureLod** (samplerCube s, vec3 uv, float lod) | Perform a 3D texture read at custom mipmap | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureProjLod** (sampler2D_type s, vec3 uv, float lod) | Perform a 2D texture read with projection/LOD | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureProjLod** (sampler2D_type s, vec4 uv, float lod) | Perform a 2D texture read with projection/LOD | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **textureProjLod** (sampler3D_type s, vec4 uv, float lod) | Perform a 3D texture read with projection/LOD | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **texelFetch** (sampler2D_type s, ivec2 uv, int lod) | Fetch a single texel using integer coordinates | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **texelFetch** (sampler2DArray_type s, ivec3 uv, int lod) | Fetch a single texel using integer coordinates | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec4_type **texelFetch** (sampler3D_type s, ivec3 uv, int lod) | Fetch a single texel using integer coordinates | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **dFdx** (vec_type p) | Derivative in ``x`` using local differencing | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **dFdy** (vec_type p) | Derivative in ``y`` using local differencing | ++------------------------------------------------------------------------+---------------------------------------------------------------+ +| vec_type **fwidth** (vec_type p) | Sum of absolute derivative in ``x`` and ``y`` | ++------------------------------------------------------------------------+---------------------------------------------------------------+ From 263ff562516c98fa6113c920ea7281e21d2d9f79 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sat, 25 Apr 2020 21:31:00 +0200 Subject: [PATCH 16/27] Define the Weblate badge size to avoid reflows during page loading --- community/contributing/documentation_guidelines.rst | 4 +++- conf.py | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/community/contributing/documentation_guidelines.rst b/community/contributing/documentation_guidelines.rst index de9e357bc..fcd1eddd5 100644 --- a/community/contributing/documentation_guidelines.rst +++ b/community/contributing/documentation_guidelines.rst @@ -121,9 +121,11 @@ You can help to translate the official Godot documentation on our `Hosted Weblat :alt: Translation state :align: center :target: https://hosted.weblate.org/engage/godot-engine/?utm_source=widget + :width: 287 + :height: 66 There also is the official -`Godot i18N repository `_ +`Godot i18n repository `_ where you can see when the data was last synchronized. License diff --git a/conf.py b/conf.py index c78504fbd..9fcdd06fa 100644 --- a/conf.py +++ b/conf.py @@ -168,6 +168,8 @@ rst_epilog = """ .. |weblate_widget| image:: https://hosted.weblate.org/widgets/godot-engine/{image_locale}/godot-docs/287x66-white.png :alt: Translation status :target: https://hosted.weblate.org/engage/godot-engine{target_locale}/?utm_source=widget + :width: 287 + :height: 66 """.format( image_locale="-" if language == "en" else language, target_locale="" if language == "en" else "/" + language, From cd04bb9c4b4526360cdd4d0818622af9b0e94e2f Mon Sep 17 00:00:00 2001 From: Andrii Doroshenko Date: Sun, 26 Apr 2020 16:28:44 +0300 Subject: [PATCH 17/27] Autowrap text inside tables by default (#3448) --- _static/css/custom.css | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/_static/css/custom.css b/_static/css/custom.css index c78fc9c65..155ef8a9d 100644 --- a/_static/css/custom.css +++ b/_static/css/custom.css @@ -463,6 +463,18 @@ footer, background-color: var(--table-row-odd-background-color); } +/* Override table no-wrap */ +/* The first column cells are not verbose, no need to wrap them */ +.wy-table-responsive table td:not(:nth-child(1)), +.wy-table-responsive table th:not(:nth-child(1)) { + white-space: normal; +} + +/* Make sure not to wrap keyboard shortcuts */ +.wy-table-responsive table td kbd { + white-space: nowrap; +} + /* Code display tweaks */ code, From 15a8804da670e6c01b764f685c13441a4301d56c Mon Sep 17 00:00:00 2001 From: Max Hilbrunner Date: Sun, 26 Apr 2020 16:53:29 +0200 Subject: [PATCH 18/27] Fix documentation guidelines to not break layout --- community/contributing/documentation_guidelines.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/community/contributing/documentation_guidelines.rst b/community/contributing/documentation_guidelines.rst index de9e357bc..5276127a3 100644 --- a/community/contributing/documentation_guidelines.rst +++ b/community/contributing/documentation_guidelines.rst @@ -39,9 +39,10 @@ reference documentation about the reStructuredText markup language. The 'Edit on GitHub' link ------------------------- -If you're reading documentation on ``docs.godotengine.org``, you'll see an -**Edit on GitHub** hyperlink at the top right of the page. Once you've created a -GitHub account, you can propose changes to a page you're reading as follows: +If you're reading documentation on `docs.godotengine.org `_, +you'll see an **Edit on GitHub** hyperlink at the top right of the page. +Once you've created a GitHub account, you can propose changes to a page you're +reading as follows: 1. Click the **Edit on GitHub** button. @@ -55,11 +56,11 @@ GitHub account, you can propose changes to a page you're reading as follows: click the button labelled **Propose file change** when done. 5. On the following screens, click the **Create pull request** button until you - see a message like ``Open. yourGitHubUsername wants to merge 1 commit into - godotengine:master from yourGitHubUsername:patch-6``. + see a message like *Username wants to merge 1 commit into + godotengine:master from Username:patch-6*. 6. A reviewer will evaluate your changes and incorporate them into the docs if - they're judged to improve them. You might also be asked to make + they're acceptable. You might also be asked to make modifications to your changes before they're included. What makes good documentation? From 6d00fee2edc5a66b051d781ef23ef057cd06e656 Mon Sep 17 00:00:00 2001 From: "Ivan.Shakhov" Date: Sun, 26 Apr 2020 18:26:13 +0200 Subject: [PATCH 19/27] Setting up Godot with Rider on Windows --- .../scripting/c_sharp/c_sharp_basics.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/getting_started/scripting/c_sharp/c_sharp_basics.rst b/getting_started/scripting/c_sharp/c_sharp_basics.rst index 2e2e74024..d9150e3a5 100644 --- a/getting_started/scripting/c_sharp/c_sharp_basics.rst +++ b/getting_started/scripting/c_sharp/c_sharp_basics.rst @@ -47,6 +47,22 @@ you can download just the instead. Make sure you at least have the .NET Framework 4.5 targeting pack installed, you can get it using any of the installers mentioned above inside the "Individual components" tab. +Windows (JetBrains Rider) +~~~~~~~~~~~~~~~~~~~~~~~~~ + +JetBrains Rider comes with bundled MSBuild, so you just need a recent .NET Framework Developer Pack. +Make sure to set the following preferences: + +- In Godot: + + - Mono External Editor to JetBrains Rider + - Mono Build Tool to JetBrains Mono. + +- In Rider: + + - TargetFrameworkVersion in csproj should match installed .NET Framework Developer Pack. + - Install **Godot support** plugin + macOS and Linux ~~~~~~~~~~~~~~~ From b13d1fd08318a89fc7a5e73a5766aa3e4fb1bc39 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sun, 26 Apr 2020 18:44:29 +0200 Subject: [PATCH 20/27] Update the Customizing the Web export HTML page --- tutorials/platform/customizing_html5_shell.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tutorials/platform/customizing_html5_shell.rst b/tutorials/platform/customizing_html5_shell.rst index 47743f811..138ba760b 100644 --- a/tutorials/platform/customizing_html5_shell.rst +++ b/tutorials/platform/customizing_html5_shell.rst @@ -44,6 +44,9 @@ replaced with their actual values during export. class. A splash image shown during the booting process can be accessed using this variable as well: ``$GODOT_BASENAME.png``. +- ``$GODOT_PROJECT_NAME``: + The project name as defined in the Project Settings. + - ``$GODOT_HEAD_INCLUDE``: A custom string to include in the HTML document just before the end of the ```` tag. It is customized in the export options under the *Html / Head Include* section. While you fully From b13b004a7ca87be8808b34fe6d01c0cafa8e8ed2 Mon Sep 17 00:00:00 2001 From: MomoHunter Date: Sun, 26 Apr 2020 19:28:23 +0200 Subject: [PATCH 21/27] Changed note-link to https in signals.rst (#3446) --- getting_started/step_by_step/signals.rst | 2 +- getting_started/step_by_step/ui_code_a_life_bar.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/getting_started/step_by_step/signals.rst b/getting_started/step_by_step/signals.rst index 567e54b5e..bb5efb848 100644 --- a/getting_started/step_by_step/signals.rst +++ b/getting_started/step_by_step/signals.rst @@ -14,7 +14,7 @@ send out a message that other nodes can listen for and respond to. For example, rather than continuously checking a button to see if it's being pressed, the button can emit a signal when it's pressed. -.. note:: You can read more about the observer pattern here: http://gameprogrammingpatterns.com/observer.html +.. note:: You can read more about the observer pattern here: https://gameprogrammingpatterns.com/observer.html Signals are a way to *decouple* your game objects, which leads to better organized and more manageable code. Instead of forcing game objects to expect other objects diff --git a/getting_started/step_by_step/ui_code_a_life_bar.rst b/getting_started/step_by_step/ui_code_a_life_bar.rst index 89f51f2fb..2094f17ef 100644 --- a/getting_started/step_by_step/ui_code_a_life_bar.rst +++ b/getting_started/step_by_step/ui_code_a_life_bar.rst @@ -213,8 +213,8 @@ of information. And you will update the state of your connected node .. note:: The Observer pattern, that signals derive from, still adds a bit of coupling between node branches. But it's generally lighter and more secure than accessing nodes directly to communicate between two separate classes. It can be okay for a parent node to get values from its children. But you'll want to favor signals if you're working with two separate branches. - Read Game Programming Patterns for more information on the `Observer pattern `_. - The `full book `_ is available online for free. + Read Game Programming Patterns for more information on the `Observer pattern `_. + The `full book `_ is available online for free. With this in mind, let's connect the ``GUI`` to the ``Player``. Click on the ``Player`` node in the scene dock to select it. Head down to the From bf420a5032ff6d246b92c6a73f5ff02d74c86167 Mon Sep 17 00:00:00 2001 From: Andrew Luchuk Date: Sun, 26 Apr 2020 14:24:16 -0400 Subject: [PATCH 22/27] Fixes typo on line 60 in understand --- tutorials/plugins/editor/making_plugins.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/plugins/editor/making_plugins.rst b/tutorials/plugins/editor/making_plugins.rst index 914d0f905..3a096d2ff 100644 --- a/tutorials/plugins/editor/making_plugins.rst +++ b/tutorials/plugins/editor/making_plugins.rst @@ -57,7 +57,7 @@ You should end up with a directory structure like this: .. image:: img/making_plugins-my_custom_mode_folder.png ``plugin.cfg`` is a simple INI file with metadata about your plugin. -The name and description help people undersatnd what it does. +The name and description help people understand what it does. Your name helps you get properly credited for your work. The version number helps others know if they have an outdated version; if you are unsure on how to come up with the version number, check out `Semantic Versioning `_. From e21df0671fe5a5aeb0e6253084dd842bad6114da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 26 Apr 2020 21:25:31 +0200 Subject: [PATCH 23/27] conf: Add language name in page title and translate it I couldn't find how to make the `html_title` value translatable using sphinx-gettext (tried `sphinx.locale._()` but it wouldn't extract it), so I'm hardcoding translations for now. --- conf.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/conf.py b/conf.py index 9fcdd06fa..7d9acb5e7 100644 --- a/conf.py +++ b/conf.py @@ -49,12 +49,27 @@ if env_tags is not None: tags.add(tag.strip()) # noqa: F821 # Language / i18n -supported_languages = ['en', 'de', 'es', 'fr', 'fi', 'it', 'ja', 'ko', 'pl', 'pt-br', 'ru', 'uk', 'zh-cn'] +supported_languages = { + "en": "Godot Engine (%s) documentation in English", + "de": "Godot Engine (%s) Dokumentation auf Deutsch", + "es": "Documentación de Godot Engine (%s) en español", + "fr": "Documentation de Godot Engine (%s) en français", + "fi": "Godot Engine (%s) dokumentaatio suomeksi", + "it": "Godot Engine (%s) documentazione in italiano", + "ja": "日本語のGodot Engine (%s)ドキュメント", + "ko": "한국어로 된 Godot Engine (%s) 문서", + "pl": "Dokumentacja Godot Engine (%s) w języku polskim", + "pt-br": "Documentação do Godot Engine (%s) em português do Brasil", + "ru": "Godot Engine (%s) документация на русском языке", + "uk": "Документація Godot Engine (3.2) російською мовою", + "zh-cn": "Godot Engine(%s)文档为俄语", +} language = os.getenv("READTHEDOCS_LANGUAGE", "en") -if not language in supported_languages: +if not language in supported_languages.keys(): print("Unknown language: " + language) - print("Supported languages: " + ", ".join(supported_languages)) - print("This is an error or needs to be added to supported_languages in conf.py") + print("Supported languages: " + ", ".join(supported_languages.keys())) + print("The configured language is either wrong, or it should be added to supported_languages in conf.py. Falling back to 'en'.") + language = en is_i18n = tags.has("i18n") # noqa: F821 @@ -93,6 +108,8 @@ html_theme_options = { "collapse_navigation": False, } +html_title = supported_languages[language] % version + # VCS options: https://docs.readthedocs.io/en/latest/vcs.html#github html_context = { "display_github": not is_i18n, # Integrate GitHub @@ -101,7 +118,7 @@ html_context = { "github_version": "master", # Version "conf_py_path": "/", # Path in the checkout to the docs root "godot_inject_language_links": True, - "godot_docs_supported_languages": supported_languages, + "godot_docs_supported_languages": list(supported_languages.keys()), "godot_docs_basepath": "https://docs.godotengine.org/", "godot_docs_suffix": ".html", "godot_default_lang": "en", From b294afe3e40ecc0a2fedfea31cdf1c709ccba9dc Mon Sep 17 00:00:00 2001 From: Shlomi Date: Sun, 26 Apr 2020 23:16:01 +0300 Subject: [PATCH 24/27] Visual Studio Configure Setup and Debugging (#3116) * Visual Studio Configure Setup and Debugging My first doc contribution! * Apply suggestions from Calinou Co-Authored-By: Hugo Locurcio Co-authored-by: Max Hilbrunner --- development/cpp/configuring_an_ide.rst | 57 +++++++++++++++++- .../cpp/img/vs_1_install_cpp_package.png | Bin 0 -> 5790 bytes .../cpp/img/vs_2_project_properties.png | Bin 0 -> 16398 bytes .../cpp/img/vs_3_debug_command_line.png | Bin 0 -> 8852 bytes development/cpp/img/vs_4_debugging_main.png | Bin 0 -> 10940 bytes 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 development/cpp/img/vs_1_install_cpp_package.png create mode 100644 development/cpp/img/vs_2_project_properties.png create mode 100644 development/cpp/img/vs_3_debug_command_line.png create mode 100644 development/cpp/img/vs_4_debugging_main.png diff --git a/development/cpp/configuring_an_ide.rst b/development/cpp/configuring_an_ide.rst index 8a87e15b7..3f31063b1 100644 --- a/development/cpp/configuring_an_ide.rst +++ b/development/cpp/configuring_an_ide.rst @@ -13,7 +13,7 @@ Development Environment), here are setup instructions for some popular ones: - :ref:`Qt Creator ` (all desktop platforms) - :ref:`Kdevelop ` (all desktop platforms) - :ref:`Xcode ` (macOS) -- :ref:`Visual Studio ` (Windows) +- :ref:`Visual Studio ` (Windows) - :ref:`Visual Studio Code` (all desktop platforms) - :ref:`Android Studio` (all desktop platforms) - :ref:`CLion` (all desktop platforms) @@ -263,6 +263,61 @@ Test it: - It should break at the point! +.. _doc_configuring_an_ide_vs: + +Visual Studio +-------------- + +Visual Studio Community is free for non-commercial use and has lots of great features, such as memory view, performance view, source control and more. +You can get it `at microsoft `_. + +Setup +^^^^^^ + +To start developing with Visual Studio, follow these steps: + +- Open the Visual Studio Installer and install the C++ package: + +.. image:: img/vs_1_install_cpp_package.png + +- Open a Command Prompt or PowerShell window, use ``cd`` to reach the Godot source directory and run ``scons platform=windows vsproj=yes``. + +- Now open the Godot folder by clicking **Open a project or solution** and choose ``godot.sln``. + - You can also double-click the ``godot.sln`` file in Explorer. + +You can now start developing with Visual Studio. + +Debugging +^^^^^^^^^^ + +Visual Studio features a powerful debugger. This allows the user to examine Godot's source code, stop at specific points in the code, +make changes, and view them on the run. + +.. Note:: Debugging the Godot Engine inside the editor will require an extra setup step. + + Because opening Godot opens the Project Manager at first instead of the project you're working on, + the debugger will detach as soon as you open a project. This means the debugger will stop, even though Godot is still running in another process. + + The reason is that the debugger attaches to the Project Manager process only. When you open a project, it will close and open another process for + the editor. + +To overcome this, you need to edit the debugging command line arguments in VS. In your project, click **Project > Project Properties**: + +.. image:: img/vs_2_project_properties.png + +Then add this to command arguments: + +.. image:: img/vs_3_debug_command_line.png + +- The ``-e`` flag is for entering the editor directly (which skips the Project Manager). +- The ``--path`` argument should be an *absolute* path to a project directory (not a `project.godot` file). + +To learn more about command line arguments, refer to the :ref:`command line tutorial `. + +To check that everything is working, put a breakpoint in ``main.cpp`` and press F5 to start debugging. + +.. image:: img/vs_4_debugging_main.png + .. _doc_configuring_an_ide_vscode: Visual Studio Code diff --git a/development/cpp/img/vs_1_install_cpp_package.png b/development/cpp/img/vs_1_install_cpp_package.png new file mode 100644 index 0000000000000000000000000000000000000000..87ada024158a9097ff6f58f614ce7a81a838c32b GIT binary patch literal 5790 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 literal 0 HcmV?d00001 diff --git a/development/cpp/img/vs_2_project_properties.png b/development/cpp/img/vs_2_project_properties.png new file mode 100644 index 0000000000000000000000000000000000000000..51c2df5edda75c79742259206dcc44b45310c494 GIT binary patch literal 16398 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 SXo2tH2gpb$h?j{P`u{IlHxw!W literal 0 HcmV?d00001 diff --git a/development/cpp/img/vs_3_debug_command_line.png b/development/cpp/img/vs_3_debug_command_line.png new file mode 100644 index 0000000000000000000000000000000000000000..f5241624759136eb9f9ef380efc040fa8f8c266c GIT binary patch literal 8852 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 S2f%|708o@ul|{>#h5R1^XsMF` literal 0 HcmV?d00001 diff --git a/development/cpp/img/vs_4_debugging_main.png b/development/cpp/img/vs_4_debugging_main.png new file mode 100644 index 0000000000000000000000000000000000000000..d546ae4257c72fe812b53c1402914ed7edaf53b3 GIT binary patch literal 10940 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 Date: Sun, 26 Apr 2020 19:05:08 -0700 Subject: [PATCH 25/27] Change "Github" to "GitHub" in Exporting doc --- getting_started/step_by_step/exporting.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_started/step_by_step/exporting.rst b/getting_started/step_by_step/exporting.rst index 75c476437..9384022cb 100644 --- a/getting_started/step_by_step/exporting.rst +++ b/getting_started/step_by_step/exporting.rst @@ -420,5 +420,5 @@ disable it by setting "Export With Debug" off when you export the project. .. note:: While WASM is supported in all major browsers, it is still an emerging technology and you may find some things that don't work. Make sure you have updated your browser to the most recent version, and report - any bugs you find at the `Godot Github repository + any bugs you find at the `Godot GitHub repository `_. From 24781e377baad9375aaa7c7175e0bedb5c9c0414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 27 Apr 2020 08:49:01 +0200 Subject: [PATCH 26/27] Fixes to HTML title localization --- conf.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/conf.py b/conf.py index 7d9acb5e7..2261858bf 100644 --- a/conf.py +++ b/conf.py @@ -56,13 +56,13 @@ supported_languages = { "fr": "Documentation de Godot Engine (%s) en français", "fi": "Godot Engine (%s) dokumentaatio suomeksi", "it": "Godot Engine (%s) documentazione in italiano", - "ja": "日本語のGodot Engine (%s)ドキュメント", - "ko": "한국어로 된 Godot Engine (%s) 문서", + "ja": "Godot Engine (%s)の日本語のドキュメント", + "ko": "Godot Engine (%s) 문서 (한국어)", "pl": "Dokumentacja Godot Engine (%s) w języku polskim", - "pt-br": "Documentação do Godot Engine (%s) em português do Brasil", - "ru": "Godot Engine (%s) документация на русском языке", - "uk": "Документація Godot Engine (3.2) російською мовою", - "zh-cn": "Godot Engine(%s)文档为俄语", + "pt-br": "Documentação da Godot Engine (%s) em Português Brasileiro", + "ru": "Документация Godot Engine (%s) на русском языке", + "uk": "Документація до Godot Engine (%s) українською мовою", + "zh-cn": "Godot Engine (%s) 简体中文文档", } language = os.getenv("READTHEDOCS_LANGUAGE", "en") if not language in supported_languages.keys(): From e4237e29488a4b70e931fa41752752c20107d4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 27 Apr 2020 09:58:08 +0200 Subject: [PATCH 27/27] Misc fixes to recent merges --- _static/css/custom.css | 2 +- _static/js/custom.js | 20 ++++---- conf.py | 4 +- development/compiling/getting_source.rst | 4 +- development/cpp/configuring_an_ide.rst | 49 +++++++++++-------- .../scripting/c_sharp/c_sharp_basics.rst | 10 ++-- .../scripting/creating_script_templates.rst | 8 +-- 7 files changed, 53 insertions(+), 44 deletions(-) diff --git a/_static/css/custom.css b/_static/css/custom.css index 155ef8a9d..d68415b3d 100644 --- a/_static/css/custom.css +++ b/_static/css/custom.css @@ -465,7 +465,7 @@ footer, /* Override table no-wrap */ /* The first column cells are not verbose, no need to wrap them */ -.wy-table-responsive table td:not(:nth-child(1)), +.wy-table-responsive table td:not(:nth-child(1)), .wy-table-responsive table th:not(:nth-child(1)) { white-space: normal; } diff --git a/_static/js/custom.js b/_static/js/custom.js index d43fed6b6..992446318 100644 --- a/_static/js/custom.js +++ b/_static/js/custom.js @@ -23,7 +23,7 @@ const registerOnScrollEvent = (function(){ // Media query handler. return function(mediaQuery) { // We only apply this logic to the "desktop" resolution (defined by a media query at the bottom). - // This handler is executed when the result of the query evaluation changes, which means that + // This handler is executed when the result of the query evaluation changes, which means that // the page has moved between "desktop" and "mobile" states. // When entering the "desktop" state, we register scroll events and adjust elements on the page. @@ -57,7 +57,7 @@ const registerOnScrollEvent = (function(){ $menu.css('max-height', `calc(100% - ${menuHeightOffset_fixed}px)`); } else { - // Between the top of the page and the threshold we calculate intermediate values + // Between the top of the page and the threshold we calculate intermediate values // to guarantee a smooth transition. $search.css('margin-top', `-${currentScroll}px`); $menu.css('margin-top', `${menuTopMargin + (scrollTopPixels - currentScroll)}px`); @@ -138,12 +138,12 @@ const registerOnScrollEvent = (function(){ }; })(); -// Subscribe to DOM changes in the sidebar container, because there is a +// Subscribe to DOM changes in the sidebar container, because there is a // banner that gets added at a later point, that we might not catch otherwise. const registerSidebarObserver = (function(){ return function(callback) { const sidebarContainer = document.querySelector('.wy-side-scroll'); - + let sidebarEthical = null; const registerEthicalObserver = () => { if (sidebarEthical) { @@ -164,16 +164,16 @@ const registerSidebarObserver = (function(){ if (mutation.type !== 'childList') { continue; } - + callback(); } }; - + const ethicalObserver = new MutationObserver(ethicalObserverCallback); ethicalObserver.observe(sidebarEthical, ethicalObserverConfig); }; registerEthicalObserver(); - + // This observer watches over direct children of the main sidebar container. const observerConfig = { childList: true }; const observerCallback = (mutationsList, observer) => { @@ -181,12 +181,12 @@ const registerSidebarObserver = (function(){ if (mutation.type !== 'childList') { continue; } - + callback(); registerEthicalObserver(); } }; - + const observer = new MutationObserver(observerCallback); observer.observe(sidebarContainer, observerConfig); }; @@ -194,7 +194,7 @@ const registerSidebarObserver = (function(){ $(document).ready(() => { const mediaQuery = window.matchMedia('only screen and (min-width: 769px)'); - + registerOnScrollEvent(mediaQuery); mediaQuery.addListener(registerOnScrollEvent); diff --git a/conf.py b/conf.py index 2261858bf..a0577f414 100644 --- a/conf.py +++ b/conf.py @@ -68,7 +68,9 @@ language = os.getenv("READTHEDOCS_LANGUAGE", "en") if not language in supported_languages.keys(): print("Unknown language: " + language) print("Supported languages: " + ", ".join(supported_languages.keys())) - print("The configured language is either wrong, or it should be added to supported_languages in conf.py. Falling back to 'en'.") + print( + "The configured language is either wrong, or it should be added to supported_languages in conf.py. Falling back to 'en'." + ) language = en is_i18n = tags.has("i18n") # noqa: F821 diff --git a/development/compiling/getting_source.rst b/development/compiling/getting_source.rst index 3c048fdca..38d6f57b2 100644 --- a/development/compiling/getting_source.rst +++ b/development/compiling/getting_source.rst @@ -15,8 +15,8 @@ The source code is available on `GitHub `_ and while you can manually download it via the website, in general you want to do it via the ``git`` version control system. -If you are compiling in order to make contributions or pull requests, you should -follow the instructions for the :ref:`pull request workflow `. +If you are compiling in order to make contributions or pull requests, you should +follow the instructions from the :ref:`Pull Request workflow `. If you don't know much about ``git`` yet, there are a great number of `tutorials `__ available on various websites. diff --git a/development/cpp/configuring_an_ide.rst b/development/cpp/configuring_an_ide.rst index 3f31063b1..b76ae113d 100644 --- a/development/cpp/configuring_an_ide.rst +++ b/development/cpp/configuring_an_ide.rst @@ -266,13 +266,14 @@ Test it: .. _doc_configuring_an_ide_vs: Visual Studio --------------- +------------- -Visual Studio Community is free for non-commercial use and has lots of great features, such as memory view, performance view, source control and more. -You can get it `at microsoft `_. +Visual Studio Community is free for non-commercial use and has many useful features, +such as memory view, performance view, source control and more. +You can get it `from Microsoft `__. Setup -^^^^^^ +^^^^^ To start developing with Visual Studio, follow these steps: @@ -280,44 +281,50 @@ To start developing with Visual Studio, follow these steps: .. image:: img/vs_1_install_cpp_package.png -- Open a Command Prompt or PowerShell window, use ``cd`` to reach the Godot source directory and run ``scons platform=windows vsproj=yes``. +- Open a Command Prompt or PowerShell window, use ``cd`` to reach the Godot source + directory and run ``scons platform=windows vsproj=yes``. -- Now open the Godot folder by clicking **Open a project or solution** and choose ``godot.sln``. +- Now open the Godot folder by clicking **Open a project or solution** and choose + ``godot.sln``. - You can also double-click the ``godot.sln`` file in Explorer. You can now start developing with Visual Studio. Debugging -^^^^^^^^^^ +^^^^^^^^^ -Visual Studio features a powerful debugger. This allows the user to examine Godot's source code, stop at specific points in the code, -make changes, and view them on the run. +Visual Studio features a powerful debugger. This allows the user to examine Godot's +source code, stop at specific points in the code, make changes, and view them on the run. -.. Note:: Debugging the Godot Engine inside the editor will require an extra setup step. - - Because opening Godot opens the Project Manager at first instead of the project you're working on, - the debugger will detach as soon as you open a project. This means the debugger will stop, even though Godot is still running in another process. +.. note:: Debugging the Godot Engine inside the editor will require an extra setup step. - The reason is that the debugger attaches to the Project Manager process only. When you open a project, it will close and open another process for - the editor. - -To overcome this, you need to edit the debugging command line arguments in VS. In your project, click **Project > Project Properties**: + Because opening Godot opens the Project Manager at first instead of the project + you're working on, the debugger will detach as soon as you open a project. + This means that the debugger will stop, even though Godot is still running in + another process. + +To overcome this, you need to edit the debugging command line arguments in VS. In your +project, click **Project > Project Properties**: .. image:: img/vs_2_project_properties.png -Then add this to command arguments: +Then add this to the command arguments: .. image:: img/vs_3_debug_command_line.png - The ``-e`` flag is for entering the editor directly (which skips the Project Manager). -- The ``--path`` argument should be an *absolute* path to a project directory (not a `project.godot` file). +- The ``--path`` argument should be an *absolute* path to a project directory (not a + `project.godot` file). -To learn more about command line arguments, refer to the :ref:`command line tutorial `. +To learn more about command line arguments, refer to the +:ref:`command line tutorial `. -To check that everything is working, put a breakpoint in ``main.cpp`` and press F5 to start debugging. +To check that everything is working, put a breakpoint in ``main.cpp`` and press F5 to +start debugging. .. image:: img/vs_4_debugging_main.png + .. _doc_configuring_an_ide_vscode: Visual Studio Code diff --git a/getting_started/scripting/c_sharp/c_sharp_basics.rst b/getting_started/scripting/c_sharp/c_sharp_basics.rst index f8e0aa667..102abb016 100644 --- a/getting_started/scripting/c_sharp/c_sharp_basics.rst +++ b/getting_started/scripting/c_sharp/c_sharp_basics.rst @@ -35,8 +35,8 @@ page in the Mono documentation. Setting up C# for Godot ----------------------- -Windows -~~~~~~~ +Windows (Visaul Studio) +~~~~~~~~~~~~~~~~~~~~~~~ Download and install the latest version of `Visual Studio `_ @@ -59,9 +59,9 @@ Make sure to set the following preferences: - Mono Build Tool to JetBrains Mono. - In Rider: - - - TargetFrameworkVersion in csproj should match installed .NET Framework Developer Pack. - - Install **Godot support** plugin + + - ``TargetFrameworkVersion`` in ``csproj`` should match the installed .NET Framework Developer Pack. + - Install **Godot support** plugin. macOS and Linux ~~~~~~~~~~~~~~~ diff --git a/getting_started/scripting/creating_script_templates.rst b/getting_started/scripting/creating_script_templates.rst index 2f0004e68..f758a1325 100644 --- a/getting_started/scripting/creating_script_templates.rst +++ b/getting_started/scripting/creating_script_templates.rst @@ -21,7 +21,7 @@ Editor-defined templates These are available globally throughout any project. The location of these templates are determined per each OS: - + - Windows: ``%APPDATA%\Godot\script_templates\`` - Linux: ``$HOME/.local/share/godot/script_templates/`` - macOS: ``$HOME/Library/Application Support/Godot/script_templates/`` @@ -40,7 +40,7 @@ the ``editor/script_templates_search_path`` setting in the If no ``script_templates`` directory is found within a project, it is simply ignored. - + Language support and overriding behavior ---------------------------------------- @@ -118,7 +118,7 @@ List of template placeholders The following describes the complete list of built-in template placeholders which are currently implemented. -Base placeholders +Base placeholders ~~~~~~~~~~~~~~~~~ +-------------+----------------------------------------------------------------+ @@ -130,7 +130,7 @@ Base placeholders +-------------+----------------------------------------------------------------+ | ``%TS%`` | Indentation placeholder. The exact type and number of | | | whitespace characters used for indentation is determined by | -| | the ``text_editor/indent/type`` and ``text_editor/indent/size``| +| | the ``text_editor/indent/type`` and ``text_editor/indent/size``| | | settings in the :ref:`EditorSettings ` | | | respectively. | +-------------+----------------------------------------------------------------+