Merge pull request #5412 from NathanLovato/gdquest/backport-docs-reorganization-and-rewrites

Backport docs reorganization and section rewrites to 3.4 branch
This commit is contained in:
Max Hilbrunner
2021-12-02 14:53:36 +01:00
committed by GitHub
1249 changed files with 10319 additions and 13194 deletions

View File

@@ -50,7 +50,7 @@ Shading
^^^^^^^
- Your First Shader Series:
- :ref:`doc_what_are_shaders`
- :ref:`doc_introduction_to_shaders`
- :ref:`doc_your_first_canvasitem_shader`
- :ref:`doc_your_first_spatial_shader`
- :ref:`doc_your_second_spatial_shader`
@@ -107,7 +107,7 @@ Step by step
^^^^^^^^^^^^
- :ref:`doc_signals`
- :ref:`doc_exporting`
- :ref:`doc_exporting_basics`
Scripting
^^^^^^^^^
@@ -169,13 +169,12 @@ Viewports
Shading
^^^^^^^
- :ref:`doc_intro_to_shaders_water_workshop`
- :ref:`doc_migrating_to_godot_shader_language`
- :ref:`doc_converting_glsl_to_godot_shaders`
- :ref:`doc_advanced_postprocessing`
Shading Reference:
- :ref:`doc_shaders`
- :ref:`doc_introduction_to_shaders`
- :ref:`doc_shading_language`
- :ref:`doc_spatial_shader`
- :ref:`doc_canvas_item_shader`

View File

@@ -409,6 +409,8 @@ This custom UI toolkit :ref:`can't be used as a library <doc_faq_use_godot_as_li
but you can still
:ref:`use Godot to create non-game applications by using the editor <doc_faq_non_game_applications>`.
.. _doc_faq_why_not_stl:
Why does Godot not use STL (Standard Template Library)?
-------------------------------------------------------

View File

@@ -11,6 +11,7 @@ About
list_of_features
docs_changelog
release_policy
complying_with_licenses
.. history
.. authors

View File

@@ -45,7 +45,7 @@ See also :ref:`ImmediateGeometry<class_ImmediateGeometry>`, :ref:`MeshDataTool<c
Tutorials
---------
- :doc:`../tutorials/content/procedural_geometry/arraymesh`
- :doc:`../tutorials/3d/procedural_geometry/arraymesh`
Properties
----------

View File

@@ -21,7 +21,7 @@ By setting various properties on this object, you can control how individual cha
Tutorials
---------
- :doc:`../tutorials/gui/bbcode_in_richtextlabel`
- :doc:`../tutorials/ui/bbcode_in_richtextlabel`
- `https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project <https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project>`__

View File

@@ -37,11 +37,11 @@ Sets :ref:`mouse_filter<class_Control_property_mouse_filter>` to :ref:`MOUSE_FIL
Tutorials
---------
- :doc:`../tutorials/gui/index`
- :doc:`../tutorials/ui/index`
- :doc:`../tutorials/2d/custom_drawing_in_2d`
- :doc:`../tutorials/gui/control_node_gallery`
- :doc:`../tutorials/ui/control_node_gallery`
- `All GUI Demos <https://github.com/godotengine/godot-demo-projects/tree/master/gui>`__

View File

@@ -23,7 +23,7 @@ See also :ref:`GodotSharp<class_GodotSharp>`.
Tutorials
---------
- :doc:`../getting_started/scripting/c_sharp/index`
- :doc:`../tutorials/scripting/c_sharp/index`
Methods
-------

View File

@@ -115,7 +115,7 @@ You need to first calculate the dictionary's hash with :ref:`hash<class_Dictiona
Tutorials
---------
- `#dictionary <../getting_started/scripting/gdscript/gdscript_basics.html#dictionary>`_ in :doc:`../getting_started/scripting/gdscript/gdscript_basics`
- `#dictionary <../tutorials/scripting/gdscript/gdscript_basics.html#dictionary>`_ in :doc:`../tutorials/scripting/gdscript/gdscript_basics`
- `3D Voxel Demo <https://godotengine.org/asset-library/asset/676>`__

View File

@@ -43,7 +43,7 @@ Here is an example on how to iterate through the files of a directory:
Tutorials
---------
- :doc:`../getting_started/step_by_step/filesystem`
- :doc:`../tutorials/scripting/filesystem`
Methods
-------

View File

@@ -42,7 +42,7 @@ The :ref:`post_import<class_EditorScenePostImport_method_post_import>` callback
Tutorials
---------
- `#custom-script <../getting_started/workflow/assets/importing_scenes.html#custom-script>`_ in :doc:`../getting_started/workflow/assets/importing_scenes`
- `#custom-script <../tutorials/assets_pipeline/importing_scenes.html#custom-script>`_ in :doc:`../tutorials/assets_pipeline/importing_scenes`
Methods
-------

View File

@@ -44,7 +44,7 @@ In the example above, the file will be saved in the user data folder as specifie
Tutorials
---------
- :doc:`../getting_started/step_by_step/filesystem`
- :doc:`../tutorials/scripting/filesystem`
- `3D Voxel Demo <https://godotengine.org/asset-library/asset/676>`__

View File

@@ -21,9 +21,9 @@ A GDNative library can implement :ref:`NativeScript<class_NativeScript>`\ s, glo
Tutorials
---------
- :doc:`../tutorials/plugins/gdnative/gdnative-c-example`
_ :doc:`../tutorials/scripting/gdnative/gdnative_c_example`
- :doc:`../tutorials/plugins/gdnative/gdnative-cpp-example`
_ :doc:`../tutorials/scripting/gdnative/gdnative_cpp_example`
Properties
----------

View File

@@ -23,7 +23,7 @@ A script implemented in the GDScript programming language. The script extends th
Tutorials
---------
- :doc:`../getting_started/scripting/gdscript/index`
- :doc:`../tutorials/scripting/gdscript/index`
Methods
-------

View File

@@ -25,7 +25,7 @@ An ``Image`` cannot be assigned to a ``texture`` property of an object directly
Tutorials
---------
- :doc:`../getting_started/workflow/assets/importing_images`
- :doc:`../tutorials/assets_pipeline/importing_images`
Properties
----------

View File

@@ -51,7 +51,7 @@ An ``ImageTexture`` is not meant to be operated from within the editor interface
Tutorials
---------
- :doc:`../getting_started/workflow/assets/importing_images`
- :doc:`../tutorials/assets_pipeline/importing_images`
Properties
----------

View File

@@ -23,7 +23,7 @@ The JavaScript singleton is implemented only in the HTML5 export. It's used to a
Tutorials
---------
- `#calling-javascript-from-script <../getting_started/workflow/export/exporting_for_web.html#calling-javascript-from-script>`_ in :doc:`../getting_started/workflow/export/exporting_for_web`
- `#calling-javascript-from-script <../tutorials/export/exporting_for_web.html#calling-javascript-from-script>`_ in :doc:`../tutorials/export/exporting_for_web`
Methods
-------

View File

@@ -21,7 +21,7 @@ The JNISingleton is implemented only in the Android export. It's used to call me
Tutorials
---------
- :doc:`../tutorials/plugins/android/android_plugin`
- :doc:`../tutorials/platform/android/android_plugin`
.. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
.. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

View File

@@ -27,9 +27,9 @@ Since instances may have any behavior, the AABB used for visibility must be prov
Tutorials
---------
- :doc:`../tutorials/3d/vertex_animation/animating_thousands_of_fish`
- :doc:`../tutorials/performance/vertex_animation/animating_thousands_of_fish`
- :doc:`../tutorials/optimization/using_multimesh`
- :doc:`../tutorials/performance/using_multimesh`
Properties
----------

View File

@@ -23,11 +23,11 @@ This is useful to optimize the rendering of a high amount of instances of a give
Tutorials
---------
- :doc:`../tutorials/3d/vertex_animation/animating_thousands_of_fish`
- :doc:`../tutorials/performance/vertex_animation/animating_thousands_of_fish`
- :doc:`../tutorials/3d/using_multi_mesh_instance`
- :doc:`../tutorials/optimization/using_multimesh`
- :doc:`../tutorials/performance/using_multimesh`
Properties
----------

View File

@@ -21,7 +21,7 @@ A synchronization mutex (mutual exclusion). This is used to synchronize multiple
Tutorials
---------
- :doc:`../tutorials/threads/using_multiple_threads`
- :doc:`../tutorials/performance/threads/using_multiple_threads`
Methods
-------

View File

@@ -43,7 +43,7 @@ Finally, when a node is freed with :ref:`Object.free<class_Object_method_free>`
Tutorials
---------
- :doc:`../getting_started/step_by_step/scenes_and_nodes`
- :doc:`../getting_started/step_by_step/nodes_and_scenes`
- `All Demos <https://github.com/godotengine/godot-demo-projects/>`__

View File

@@ -45,9 +45,9 @@ Objects also receive notifications. Notifications are a simple way to notify the
Tutorials
---------
- :doc:`../getting_started/workflow/best_practices/node_alternatives`
- :doc:`../tutorials/best_practices/node_alternatives`
- `#advanced-exports <../getting_started/scripting/gdscript/gdscript_exports.html#advanced-exports>`_ in :doc:`../getting_started/scripting/gdscript/gdscript_exports`
- `#advanced-exports <../tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports>`_ in :doc:`../tutorials/scripting/gdscript/gdscript_exports`
Methods
-------

View File

@@ -1686,7 +1686,7 @@ Returns ``true`` if the environment variable with the name ``variable`` exists.
- :ref:`bool<class_bool>` **has_feature** **(** :ref:`String<class_String>` tag_name **)** |const|
Returns ``true`` if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the `Feature Tags <https://docs.godotengine.org/en/3.4/getting_started/workflow/export/feature_tags.html>`__ documentation for more details.
Returns ``true`` if the feature for the given feature tag is supported in the currently running instance, depending on platform, build etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the `Feature Tags <https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html>`_ documentation for more details.
**Note:** Tag names are case-sensitive.

View File

@@ -27,7 +27,7 @@ Use the ``process_material`` property to add a :ref:`ParticlesMaterial<class_Par
Tutorials
---------
- :doc:`../tutorials/3d/vertex_animation/controlling_thousands_of_fish`
- :doc:`../tutorials/performance/vertex_animation/controlling_thousands_of_fish`
- `Third Person Shooter Demo <https://godotengine.org/asset-library/asset/678>`__

View File

@@ -29,7 +29,7 @@ In the vast majority of use cases, instantiating and using ``Reference``-derived
Tutorials
---------
- :doc:`../getting_started/workflow/best_practices/node_alternatives`
- :doc:`../tutorials/best_practices/node_alternatives`
Methods
-------

View File

@@ -25,9 +25,9 @@ Resource is the base class for all Godot-specific resource types, serving primar
Tutorials
---------
- :doc:`../getting_started/step_by_step/resources`
- :doc:`../tutorials/scripting/resources`
- :doc:`../getting_started/workflow/best_practices/node_alternatives`
- :doc:`../tutorials/best_practices/node_alternatives`
Properties
----------

View File

@@ -30,7 +30,7 @@ A custom effect for use with :ref:`RichTextLabel<class_RichTextLabel>`.
Tutorials
---------
- :doc:`../tutorials/gui/bbcode_in_richtextlabel`
- :doc:`../tutorials/ui/bbcode_in_richtextlabel`
- `https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project <https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project>`__

View File

@@ -31,7 +31,7 @@ Rich text can contain custom text, fonts, images and some basic formatting. The
Tutorials
---------
- :doc:`../tutorials/gui/bbcode_in_richtextlabel`
- :doc:`../tutorials/ui/bbcode_in_richtextlabel`
- `GUI Rich Text/BBcode Demo <https://godotengine.org/asset-library/asset/132>`__

View File

@@ -25,9 +25,9 @@ You can also use the ``SceneTree`` to organize your nodes into groups: every nod
Tutorials
---------
- :doc:`../getting_started/step_by_step/scene_tree`
- :doc:`../tutorials/scripting/scene_tree`
- :doc:`../tutorials/viewports/multiple_resolutions`
- :doc:`../tutorials/rendering/multiple_resolutions`
Properties
----------

View File

@@ -25,7 +25,7 @@ The ``new`` method of a script subclass creates a new instance. :ref:`Object.set
Tutorials
---------
- :doc:`../getting_started/step_by_step/scripting`
- :doc:`../getting_started/step_by_step/scripting_first_script`
Properties
----------

View File

@@ -21,7 +21,7 @@ A synchronization semaphore which can be used to synchronize multiple :ref:`Thre
Tutorials
---------
- :doc:`../tutorials/threads/using_multiple_threads`
- :doc:`../tutorials/performance/threads/using_multiple_threads`
Methods
-------

View File

@@ -23,9 +23,9 @@ This class allows you to define a custom shader program that can be used by a :r
Tutorials
---------
- :doc:`../tutorials/shading/index`
- :doc:`../tutorials/shaders/index`
- :doc:`../tutorials/shading/your_first_shader/what_are_shaders`
- :ref:`doc_introduction_to_shaders`
Properties
----------

View File

@@ -23,7 +23,7 @@ A material that uses a custom :ref:`Shader<class_Shader>` program to render eith
Tutorials
---------
- :doc:`../tutorials/shading/index`
- :doc:`../tutorials/shaders/index`
Properties
----------

View File

@@ -19,7 +19,7 @@ This is the built-in string class (and the one used by GDScript). It supports Un
Tutorials
---------
- :doc:`../getting_started/scripting/gdscript/gdscript_format_string`
- :doc:`../tutorials/scripting/gdscript/gdscript_format_string`
Methods
-------

View File

@@ -23,7 +23,7 @@ Theme resources can alternatively be loaded by writing them in a ``.theme`` file
Tutorials
---------
- :doc:`../tutorials/gui/gui_skinning`
- :doc:`../tutorials/ui/gui_skinning`
Properties
----------

View File

@@ -23,9 +23,9 @@ A unit of execution in a process. Can run methods on :ref:`Object<class_Object>`
Tutorials
---------
- :doc:`../tutorials/threads/using_multiple_threads`
- :doc:`../tutorials/performance/threads/using_multiple_threads`
- :doc:`../tutorials/threads/thread_safe_apis`
- :doc:`../tutorials/performance/threads/thread_safe_apis`
- `3D Voxel Demo <https://godotengine.org/asset-library/asset/676>`__

View File

@@ -33,7 +33,7 @@ Tutorials
- :doc:`../tutorials/2d/2d_transforms`
- :doc:`../tutorials/viewports/index`
- :doc:`../tutorials/rendering/viewports`
- `GUI in 3D Demo <https://godotengine.org/asset-library/asset/127>`__

View File

@@ -25,7 +25,7 @@ You are most likely to use this class via the Visual Script editor or when writi
Tutorials
---------
- :doc:`../getting_started/scripting/visual_script/index`
- :doc:`../tutorials/scripting/visual_script/index`
Methods
-------

View File

@@ -37,7 +37,7 @@ In 2D, all visible objects are some form of canvas item. In order to be visible,
Tutorials
---------
- :doc:`../tutorials/optimization/using_servers`
- :doc:`../tutorials/performance/using_servers`
Properties
----------

View File

@@ -23,7 +23,7 @@ Visual shader graphs consist of various nodes. Each node in the graph is a separ
Tutorials
---------
- :doc:`../tutorials/shading/visual_shaders`
- :doc:`../tutorials/shaders/visual_shaders`
Properties
----------

View File

@@ -21,7 +21,7 @@ Gives access to input variables (built-ins) available for the shader. See the sh
Tutorials
---------
- :doc:`../tutorials/shading/shading_reference/index`
- :doc:`../tutorials/shaders/shader_reference/index`
Properties
----------

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -7,4 +7,5 @@ Asset Library
what_is_assetlib
using_assetlib
submitting_to_assetlib
uploading_to_assetlib

View File

@@ -0,0 +1,210 @@
.. _doc_submitting_to_assetlib:
Submitting to the Asset Library
===============================
Introduction
------------
This tutorial aims to serve as a guide on how you can submit your own assets
to the Godot Asset Library and share them with the Godot community.
As mentioned in the :ref:`doc_using_assetlib` document, in order to be able to
submit assets to the AssetLib, you need to have a registered account, and be
logged in.
Submission guidelines
---------------------
Before submitting your asset, please ensure it follows all of the
requirements, and also consider following the recommendations.
Requirements
~~~~~~~~~~~~
Generally speaking, most assets people submit to the asset library
are accepted. However, in order for your asset to be accepted, there
are a few requirements your asset needs to meet to be approved.
* The asset must **work**. If the asset doesn't run or otherwise doesn't
work in the specified Godot version, then it will be rejected.
* The asset must have a proper **.gitignore** file. It's important to
keep redundant data out of the repository.
`Here's a template. <https://raw.githubusercontent.com/aaronfranke/gitignore/godot/Godot.gitignore>`_
* No **submodules**, or any submodules must be non-essential. GitHub
does not include submodules in the downloaded ZIP file, so if the
asset needs the contents of the submodule, your asset won't work.
* The **license** needs to be correct. The license listed on the asset
library must match the license in the repository. The repo MUST
have a license file, called either "LICENSE" or "LICENSE.md".
This file must contain the license text itself and a copyright
statement that includes the year(s) and copyright holder.
* Use proper **English** for the name and description of your asset.
This includes using correct capitalization, and using full
sentences in the description. You can also include other languages,
but there should at least be an English version.
* The icon link must be a **direct link**. For icons hosted on GitHub, the
link must start with "raw.githubusercontent.com", not "github.com".
Recommendations
~~~~~~~~~~~~~~~
These things are not required for your asset to be approved, but
if you follow these recommendations, you can help make the asset
library a better place for all users.
* Fix or suppress all script **warnings**. The warning system is there to
help identify issues with your code, but people using your asset
don't need to see them.
* Make your code conform to the official **style guides**. Having a
consistent style helps other people read your code, and it also helps
if other people wish to contribute to your asset. See: the
:ref:`doc_gdscript_styleguide` or the :ref:`doc_c_sharp_styleguide`.
* If you have screenshots in your repo, place them in their own subfolder
and add an empty **.gdignore** file in the same folder (note: **gd**, not **git**).
This prevents Godot from importing your screenshots.
On Windows, open a command prompt in the project folder and run
``type nul > .gdignore`` to create a file whose name starts with a period.
* If your asset is a library for working with other files,
consider including **example files** in the asset.
* Consider adding a **.gitattributes** file to your repo. This file allows
giving extra instructions to Git, such as specifying line endings and listing
files not required for your asset to function with the ``export-ignore``
directive. This directive removes such files from the resulting ZIP file
and prevents them from being downloaded by the asset library users.
For a typical plugin **.gitattributes** may look like this:
.. code-block:: none
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
# Ignore some files when exporting to a ZIP.
/.gitattributes export-ignore
/.gitignore export-ignore
/LICENSE export-ignore
/LICENSE.md export-ignore
/README.md export-ignore
/project.godot export-ignore
/icon.png export-ignore
/icon.svg export-ignore
Other types of assets may require a different configuration (e.g.
a project template requires **project.godot**).
* If you are submitting a plugin, add a **copy** of your license and readme
to the plugin folder itself. This is the folder that users are guaranteed to
keep with their project, so a copy ensures they always have those files handy
(and helps them fulfill your licensing terms).
* The **icon** should be a square, its aspect ratio should be 1:1. It should
also ideally have a minimum resolution of 64x64 pixels.
* While the asset library allows more than just GitHub, consider
hosting your asset's source code on **GitHub**. Other services may not
work reliably, and a lack of familiarity can be a barrier to contributors.
Submitting
----------
Once you are logged in, you will be able to head over to the "Submit Assets" page
of the AssetLib, which will look like this:
|image0|
While it may look like a lot (and there is more as you scroll down), each field is
described in terms of what you should put in. We will nonetheless go over what
is required in the submission form here as well.
* **Asset Name**:
The name of your asset. Should be a unique, descriptive title of
what your asset is.
* **Category**:
The category that your asset belongs to, and will be shown in
search results. The category is split into **Addons** and **Projects**.
In-editor, assets of the Project type (Templates, Demos, Projects) only show
up when viewing the AssetLib from the Project Manager, while assets of the
Addon type will only be visible from inside a project.
* **Godot version**:
The version of the engine that the asset works with.
Currently, it's not possible to have a single asset entry contain downloads for
multiple engine versions, so you may need to re-submit the asset multiple times,
with an entry for each Godot version it supports. This is particularly important
when dealing with major versions of the engine, such as Godot 2.x and Godot 3.x.
* **Version**:
The version number of the asset. While you are free to choose
and use any versioning scheme that you like, you may want to look into
something such as `SemVer <https://semver.org>`_ if you want your asset's
versioning scheme to be clear and consistent. Note that there is also an
internal version number, incremented every time the asset download URL is
changed or updated.
* **Repository host**:
Assets uploaded to the AssetLib are not hosted on it
directly. Instead, they point to repositories hosted on third-party Git providers,
such as GitHub, GitLab or Bitbucket. This is where you choose which provider
your asset uses, so the site can compute the final download link.
* **Repository URL**:
The URL to your asset's files/webpage. This will vary
based on your choice of provider, but it should look similar to `https://github.com/<user>/<project>`.
* **Issues URL**:
The URL to your asset's issue tracker. Again, this will differ
from repository host to repository host, but will likely look similar to
`https://github.com/<user>/<project>/issues`. You may leave this field empty
if you use your provider's issue tracker, and it's part of the same repository.
* **Download Commit**:
The commit of the asset. For example,
`b1d3172f89b86e52465a74f63a74ac84c491d3e1`. The site computes
the actual download URL from this.
* **Icon URL**:
The URL to your asset's icon (which will be used as a thumbnail
in the AssetLib search results and on the asset's page). Should be an image
in either the PNG or JPG format.
* **License**:
The license under which you are distributing the asset. The list
includes a variety of free and open-source software licenses, such as GPL
(v2 and v3), MIT, BSD and Boost Software License. You can visit `OpenSource.org <https://opensource.org>`_
for a detailed description of each of the listed licenses.
* **Description**:
Finally, you can use the Description field for a textual
overview of your asset, its features and behavior, a changelog, et cetera. In the
future, formatting with Markdown will be supported, but currently, your only
option is plain text.
You may also include up to three video and/or image previews, which will be shown
at the bottom of the asset page. Use the "Enable" checkbox on each of the preview
submission boxes to enable them.
* **Type**:
Either an image, or a video.
* **Image/YouTube URL**:
Either a link to the image, or to a video, hosted on YouTube.
* **Thumbnail URL**:
A URL to an image that will be used as a thumbnail for the
preview. This option will be removed eventually, and thumbnails will be automatically
computed instead.
Once you are done, press "Submit". Your asset will be entered into the review queue.
You can check all assets currently pending a review `here <https://godotengine.org/asset-library/asset/edit?&asset=-1>`_ .
The approval process is manual and may take up to a few days for your asset to be accepted (or rejected), so please
be patient!
.. note::
You may have some luck accelerating the approval process by messaging the
moderators and AssetLib reviewers on the `Contributors Chat <https://chat.godotengine.org/>`_,
or the official Discord server.
You will be informed when your asset is reviewed. If it was rejected,
you will be told why that may have been, and you will be able to submit it again
with the appropriate changes.
.. |image0| image:: img/assetlib_submit.png

View File

@@ -99,7 +99,7 @@ new functions:
|image6|
You can learn how to submit assets to the Library, and what the asset submission
guidelines are, in the next part of this tutorial, :ref:`doc_uploading_to_assetlib`.
guidelines are, in the next part of this tutorial, :ref:`doc_submitting_to_assetlib`.
In the editor
-------------

View File

@@ -14,16 +14,25 @@ Q&A
- `Official Godot Questions & Answers <https://godotengine.org/qa/>`_
Rocket.Chat
-----------
- `Godot Contributors Chat <https://chat.godotengine.org/>`_
IRC on Freenode
---------------
.. note::
As of January 2021, core developer chat has moved to the Godot Contributors Chat platform listed above.
- `General: #godotengine <https://webchat.freenode.net/?channels=#godotengine>`_
- `Engine development: #godotengine-devel <https://webchat.freenode.net/?channels=#godotengine-devel>`_
- `Documentation: #godotengine-doc <https://webchat.freenode.net/?channels=#godotengine-doc>`_
- `Pull request meetings: #godotengine-meeting <https://webchat.freenode.net/?channels=#godotengine-meeting>`_
- `GDNative: #godotengine-gdnative <https://webchat.freenode.net/?channels=#godotengine-gdnative>`_
- `Website and public relations: #godotengine-atelier <https://webchat.freenode.net/?channels=#godotengine-atelier>`_
- `IRC logs <https://godot.eska.me/irc-logs/>`_
- `IRC logs <https://freenode.logbot.info/godotengine-devel>`_
Other chats
-----------

View File

@@ -36,7 +36,7 @@ Best Practices
Many contributors are extremely creative and just enjoy the process of designing
abstract data structures, creating nice user interfaces, or simply love
programming. Whatever the case may be, they come up with cool ideas, which may
not be actually solving any actual problems.
or may not be solving any real problems.
.. image:: img/best_practices1.png
@@ -90,7 +90,7 @@ to work around it. This difficulty can be expressed as:
If the problem is *too complex* for most users to solve, the software must offer
a ready-made solution for it. Likewise, if the problem is easy for the user to
workaround, offering such a solution is unnecessary and it's up to the user to
work around, offering such a solution is unnecessary and it's up to the user to
do it.
The exception, however, is when the user stumbles into this problem *frequently
@@ -104,9 +104,9 @@ This is why discussing with other developers (next point) is always advised.
#4: The solution must be discussed with others
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It is often the case that, when users stumble upon problems, they are only
immersed in their own project, so they will naturally try to solve the problem
from their own perspective, thinking only about their use case.
It is often the case that when users stumble upon problems, they are only
immersed in their project, so they will naturally try to solve the problem
from their perspective, thinking only about their use case.
Because of this, user proposed solutions don't always contemplate other use
cases that developers are often aware of, so they are often biased towards their
@@ -148,7 +148,7 @@ problems (as described in #2) also make their appearance on stage.
.. image:: img/best_practices5.png
The main problem is that, in reality, it rarely works this way. Most of the
time, just writing an individual solution to each problem results in code that
time, writing an individual solution to each problem results in code that
is simpler and more maintainable.
Additionally, solutions that target individual problems are better for the
@@ -157,7 +157,7 @@ to learn and remember a more complex system they will only need for simple
tasks.
Big and flexible solutions also have an additional drawback which is that, over
time, they are rarely flexible enough for all users, which keep requesting more
time, they are rarely flexible enough for all users, who keep requesting more
functions added (and making the API and codebase more and more complex).
#6: Cater to common use cases, leave the door open for the rare ones
@@ -225,7 +225,7 @@ but this path is always the advised one.
Not every problem has a simple solution and, many times, the right choice is to
use a third party library to solve the problem.
As Godot requires to be shipped in a large amount of platforms, we just can't
As Godot requires to be shipped in a large amount of platforms, we can't
link libraries dynamically. Instead, we bundle them in our source tree.
.. image:: img/best_practices8.png

View File

@@ -4,8 +4,9 @@ Bug triage guidelines
=====================
This page describes the typical workflow of the bug triage team aka
bugsquad when handling issues and pull requests on Godot's `GitHub <https://github.com/godotengine/godot>`_
repository. It is bound to evolve together with the bugsquad, so do not
bugsquad when handling issues and pull requests on Godot's
`GitHub repository <https://github.com/godotengine/godot>`__.
It is bound to evolve together with the bugsquad, so do not
hesitate to propose modifications to the following guidelines.
Issues management
@@ -25,7 +26,7 @@ contributors are welcome to take on any issue, if relevant after mentioning
it on the issue ticket and/or discussing the best way to resolve it with
other developers.
For the time being we do not use the project dashboard feature either.
For the time being, we do not use the project dashboard feature either.
As far as possible, we try to assign labels (and milestones, when relevant)
to both issues and pull requests.
@@ -39,7 +40,13 @@ The following labels are currently defined in the Godot repository:
- *Archived*: either a duplicate of another issue, or invalid. Such an
issue would also be closed.
- *Breaks compat*: describes something that can only be fixed by breaking
compatibility with existing projects.
- *Bug*: describes something that is not working properly.
- *Cherrypick*: describes something that can be backported to a stable branch
after being merged in the ``master`` branch.
- *Crash:* describes a bug that causes the engine to crash.
This label is only used for "hard" crashes, not freezes.
- *Confirmed*: has been confirmed by at least one other contributor
than the bug reporter (typically for *Bug* reports).
The purpose of this label is to let developers know which issues are
@@ -58,11 +65,17 @@ The following labels are currently defined in the Godot repository:
- *Enhancement*: describes a proposed enhancement to an existing
functionality.
- *Feature proposal*: describes a wish for a new feature to be
implemented.
implemented. Note that the main Godot repository no longer accepts
feature requests. Please use
`godot-proposals <https://github.com/godotengine/godot-proposals>`__ instead.
- *For PR meeting*: the issue needs to be discussed in a pull request meeting.
These meetings are public and are held on the `Godot Contributors Chat <https://chat.godotengine.org/>`_.
- *Junior job*: the issue is *assumed* to be an easy one to fix, which makes
it a great fit for junior contributors who need to become familiar with
the code base.
- *Needs rebase*: the issue need a Git rebase to be merged.
- *High priority:* the issue is particularly important as it can
prevent people from releasing their projects or cause data loss.
- *Needs work*: the pull request needs additional work before it can be merged.
- *Needs testing*: the issue/pull request could not be completely tested
and thus need further testing. This can mean that it needs to be tested
on different hardware/software configurations or even that the steps to
@@ -97,19 +110,27 @@ feature request, or one that is not precise enough to be worked on.
- *Audio*: relates to the audio features (low and high level).
- *Buildsystem*: relates to building issues, either linked to the SCons
buildsystem or to compiler peculiarities.
- *Codestyle*: relates to the programming style used within the codebase.
- *Core*: anything related to the core engine. It might be further
split later on as it's a pretty big topic.
- *Drivers*: relates to issues with the drivers used by the engine.
- *Editor*: relates to issues in the editor (mainly UI).
- *GDNative*: relates to the GDNative module.
- *GDScript*: relates to GDScript.
- *GUI*: relates to GUI (Control) nodes.
- *Import*: relates to the resource import system.
- *Input*: relates to input system.
- *Mono*: relates to the C# / Mono bindings.
- *Navigation*: relates to the navigation system (including A* and navmeshes).
- *Network*: relates to networking.
- *Physics*: relates to the physics engine (2D/3D).
- *Plugin*: relates to problems encountered while writing plugins.
- *Porting*: relates to some specific platforms.
- *Porting*: relates to some specific platforms or exporting projects.
- *Rendering*: relates to the 2D and 3D rendering engines.
- *VisualScript*: relates to issues with the visual scripting language.
- *Shaders*: relates to the Godot shader language or visual shaders.
- *Tests*: relates to unit tests.
- *Thirdparty*: relates to third-party libraries used in Godot.
- *VisualScript*: relates to issues with the visual scripting language (*not* visual shaders).
- *XR*: relates to Augmented Reality or Virtual Reality.
Issues would typically correspond to only one topic, though it's not
unthinkable to see issues that fit two bills. The general idea is that
@@ -125,17 +146,45 @@ If one of the platform labels is used, it is then exclusive and the
previous assumption doesn't stand anymore (so if it's a bug on e.g.
Android and Linux exclusively, select those two platforms).
Documentation labels
~~~~~~~~~~~~~~~~~~~~
In the `documentation repository <https://github.com/godotengine/godot-docs>`__, we
use the following labels:
- *Bug*: Incorrect information in an existing page. Not to be used for
*missing* information.
- *Class reference*: the issue is about the class reference, not a documentation page.
- *Discussion*: the issue is not consensual and needs further
discussion to define what exactly should be done to address the
topic.
- *Enhancememnt*: new information to be added in an existing page.
- *New page*: a new page to be created.
- *Hero wanted!*: contributions for issues with these labels
are especially welcome. Note that this **doesn't** mean you can't work
on issues without these labels.
- *Organization*: The issue involves moving pages around or reorganizing content.
- *Redirect*: a redirection needs to be created in the Read the Docs backend.
Only administrators can do this.
- *Salvageable*: the pull request can't be merged due to design issues or
merge conflicts and its author is not active anymore. However, it can still
be picked up by an external contributor to bring it to a mergeable state.
To do so, you need to open a new pull request based on the original pull request.
- *Topic:Mono*: the issue is about C# support in Godot.
- *Topic:Website*: the issue relates to the Sphinx/Read the Docs frontend or backend,
not the documentation contents.
Milestones
~~~~~~~~~~
`Milestones <https://github.com/godotengine/godot/milestones>`_ correspond to planned future versions of Godot for which
there is an existing roadmap. Issues that fit in the said roadmap should
be filed under the corresponding milestone; if they don't correspond to
any current roadmap, they should be left without milestone. As a rule of
thumb, an issue corresponds to a given milestone if it concerns a feature
that is new in the milestone, or a critical bug that can't be accepted in any
future stable release, or anything that Juan wants to work on right now.
:)
`Milestones <https://github.com/godotengine/godot/milestones>`_ correspond to
planned future versions of Godot for which there is an existing roadmap. Issues
that fit in the said roadmap should be filed under the corresponding milestone;
if they don't correspond to any current roadmap, they should be left without
milestone. As a rule of thumb, an issue corresponds to a given milestone if it
concerns a feature that is new in the milestone, or a critical bug that can't be
accepted in any future stable release, or anything that Juan wants to work on
right now. :)
Contributors are free to pick issues regardless of their assigned milestone;
if a fix is proposed for a bug that was not deemed urgent and thus without

View File

@@ -21,7 +21,7 @@ install all these tools. It comes pre-installed with `Python
<https://www.python.org/>`__. Ensure that you install and use Python 3. Here are
the commands to clone the repository and then install all requirements.
.. note:: You may need to write ``python3 -m pip`` (Unix) or ``py -m pip`` (Windows) instead of ``pip3``.
.. note:: You may need to write ``python3 -m pip`` (Unix) or ``py -m pip`` (Windows) instead of ``pip3``.
If both approaches fail, `check that you have pip3 installed <https://pip.pypa.io/en/stable/installation/>`__.
.. code:: sh

View File

@@ -0,0 +1,254 @@
.. _doc_class_reference_writing_guidelines:
Class reference writing guidelines
==================================
This page explains how to write the class reference. You will learn where to
write new descriptions for the classes, methods, and properties for Godot's
built-in node types.
.. seealso::
To learn to submit your changes to the Godot project using the Git version
control system, see :ref:`doc_updating_the_class_reference`.
The reference for each class is contained in an XML file like the one below:
.. code-block:: xml
<class name="Node2D" inherits="CanvasItem" version="4.0">
<brief_description>
A 2D game object, inherited by all 2D-related nodes. Has a position, rotation, scale, and Z index.
</brief_description>
<description>
A 2D game object, with a transform (position, rotation, and scale). All 2D nodes, including physics objects and sprites, inherit from Node2D. Use Node2D as a parent node to move, scale and rotate children in a 2D project. Also gives control of the node's render order.
</description>
<tutorials>
<link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
<link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link>
</tutorials>
<methods>
<method name="apply_scale">
<return type="void">
</return>
<argument index="0" name="ratio" type="Vector2">
</argument>
<description>
Multiplies the current scale by the [code]ratio[/code] vector.
</description>
</method>
[...]
<method name="translate">
<return type="void">
</return>
<argument index="0" name="offset" type="Vector2">
</argument>
<description>
Translates the node by the given [code]offset[/code] in local coordinates.
</description>
</method>
</methods>
<members>
<member name="global_position" type="Vector2" setter="set_global_position" getter="get_global_position">
Global position.
</member>
[...]
<member name="z_index" type="int" setter="set_z_index" getter="get_z_index" default="0">
Z index. Controls the order in which the nodes render. A node with a higher Z index will display in front of others.
</member>
</members>
<constants>
</constants>
</class>
It starts with brief and long descriptions. In the generated docs, the brief
description is always at the top of the page, while the long description lies
below the list of methods, variables, and constants. You can find methods,
member variables, constants, and signals in separate XML nodes.
For each, you want to learn how they work in Godot's source code. Then, fill
their documentation by completing or improving the text in these tags:
- `<brief_description>`
- `<description>`
- `<constant>`
- `<method>` (in its `<description>` tag; return types and arguments don't take separate
documentation strings)
- `<member>`
- `<signal>` (in its `<description>` tag; arguments don't take separate documentation strings)
- `<constant>`
Write in a clear and simple language. Always follow the :ref:`writing guidelines
<doc_docs_writing_guidelines>` to keep your descriptions short and easy to read.
**Do not leave empty lines** in the descriptions: each line in the XML file will
result in a new paragraph, even if it is empty.
.. _doc_class_reference_writing_guidelines_editing_xml:
How to edit class XML
---------------------
Edit the file for your chosen class in ``doc/classes/`` to update the class
reference. The folder contains an XML file for each class. The XML lists the
constants and methods you will find in the class reference. Godot generates and
updates the XML automatically.
.. note:: For some modules in the engine's source code, you'll find the XML
files in the ``modules/<module_name>/doc_classes/`` directory instead.
Edit it using your favorite text editor. If you use a code editor, make sure
that it doesn't change the indent style: you should use tabs for the XML and
four spaces inside BBCode-style blocks. More on that below.
To check that the modifications you've made are correct in the generated
documentation, navigate to the ``doc/`` folder and run the command ``make rst``.
This will convert the XML files to the online documentation's format and output
errors if anything's wrong.
Alternatively, you can build Godot and open the modified page in the built-in
code reference. To learn how to compile the engine, read the :ref:`compilation
guide <toc-devel-compiling>`.
We recommend using a code editor that supports XML files like Vim, Atom, Visual Studio Code,
Notepad++, or another to comfortably edit the file. You can also use their
search feature to find classes and properties quickly.
.. _doc_class_reference_writing_guidelines_bbcode:
Improve formatting with BBCode style tags
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Godot's class reference supports BBCode-like tags. They add nice formatting to
the text. Here's the list of available tags:
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| Tag | Effect | Usage | Result |
+============================+======================================+===================================+===================================================+
| [Class] | Link a class | Move the [Sprite2D]. | Move the :ref:`class_Sprite`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [method methodname] | Link to a method in this class | Call [method hide]. | Call :ref:`hide <class_Spatial_method_hide>`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [method Class.methodname] | Link to another class's method | Call [method Node3D.hide]. | Call :ref:`hide <class_Spatial_method_hide>`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [member membername] | Link to a member in this class | Get [member scale]. | Get :ref:`scale <class_Node2D_property_scale>`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [member Class.membername] | Link to another class's member | Get [member Node2D.scale]. | Get :ref:`scale <class_Node2D_property_scale>`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [signal signalname] | Link to a signal in this class | Emit [signal renamed]. | Emit :ref:`renamed <class_Node_signal_renamed>`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [signal Class.signalname] | Link to another class's signal | Emit [signal Node.renamed]. | Emit :ref:`renamed <class_Node_signal_renamed>`. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [b] [/b] | Bold | Some [b]bold[/b] text. | Some **bold** text. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [i] [/i] | Italic | Some [i]italic[/i] text. | Some *italic* text. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [code] [/code] | Monospace | Some [code]monospace[/code] text. | Some ``monospace`` text. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [kbd] [/kbd] | Keyboard/mouse shortcut | Some [kbd]Ctrl + C[/kbd] key. | Some :kbd:`Ctrl + C` key. |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [codeblock] [/codeblock] | Multiline preformatted block | *See below.* | *See below.* |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [codeblocks] [/codeblocks] | [codeblock] for multiple languages | *See below.* | *See below.* |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [gdscript] [/gdscript] | GDScript codeblock tab in codeblocks | *See below.* | *See below.* |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
| [csharp] [/csharp] | C# codeblock tab in codeblocks | *See below.* | *See below.* |
+----------------------------+--------------------------------------+-----------------------------------+---------------------------------------------------+
Use ``[codeblock]`` for pre-formatted code blocks. Inside ``[codeblock]``,
always use **four spaces** for indentation. The parser will delete tabs. For
example:
.. code-block:: none
[codeblock]
func _ready():
var sprite = get_node("Sprite2D")
print(sprite.get_pos())
[/codeblock]
Will display as:
.. code-block:: gdscript
func _ready():
var sprite = get_node("Sprite2D")
print(sprite.get_pos())
If you need to have different code version in GDScript and C#, use
``[codeblocks]`` instead. If you use ``[codeblocks]``, you also need to have at
least one of the language-specific tags, ``[gdscript]`` and ``[csharp]``.
Always write GDScript code examples first! You can use this `experimental code
translation tool <https://github.com/HaSa1002/codetranslator>`_ to speed up your
workflow.
.. code-block:: none
[codeblocks]
[gdscript]
func _ready():
var sprite = get_node("Sprite2D")
print(sprite.get_pos())
[/gdscript]
[csharp]
public override void _Ready()
{
var sprite = GetNode("Sprite2D");
GD.Print(sprite.GetPos());
}
[/csharp]
[/codeblocks]
The above will display as:
.. tabs::
.. code-tab:: gdscript GDScript
func _ready():
var sprite = get_node("Sprite2D")
print(sprite.get_pos())
.. code-tab:: csharp
public override void _Ready()
{
var sprite = GetNode("Sprite2D");
GD.Print(sprite.GetPos());
}
To denote important information, add a paragraph starting with "[b]Note:[/b]" at
the end of the description:
.. code-block:: none
[b]Note:[/b] Only available when using the Vulkan renderer.
To denote crucial information that could cause security issues or loss of data
if not followed carefully, add a paragraph starting with "[b]Warning:[/b]" at
the end of the description:
.. code-block:: none
[b]Warning:[/b] If this property is set to [code]true[/code], it allows clients to execute arbitrary code on the server.
For deprecated properties, add a paragraph starting with "[i]Deprecated.[/i]".
Notice the use of italics instead of bold:
.. code-block:: none
[i]Deprecated.[/i] This property has been replaced by [member other_property].
In all the paragraphs described above, make sure the punctuation is part of the
BBCode tags for consistency.
I don't know what this method does!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
No problem. Leave it behind, and list the methods you skipped when you request a
pull of your changes. Another writer will take care of it.
You can still look at the methods' implementation in Godot's source code on
GitHub. If you have doubts, feel free to ask on the `Q&A website
<https://godotengine.org/qa/>`__ and `Godot Contributors Chat <https://chat.godotengine.org/>`_.

View File

@@ -48,6 +48,11 @@ setup clang-format locally to check and automatically fix all your commits.
``/* clang-format off */`` and ``/* clang-format on */`` to tell
clang-format to ignore a chunk of code.
.. seealso::
These guidelines only cover code formatting. See :ref:`doc_cpp_usage_guidelines`
for a list of language features that are permitted in pull requests.
Using clang-format locally
~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -117,9 +122,13 @@ Here is a non-exhaustive list of beautifier plugins for some IDEs:
- Visual Studio Code: `Clang-Format <https://marketplace.visualstudio.com/items?itemName=xaver.clang-format>`__
- Visual Studio: `ClangFormat <https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat>`__
- vim: `vim-clang-format <https://github.com/rhysd/vim-clang-format>`__
- CLion: Starting from version ``2019.1``, no plugin is required. Instead, enable
`ClangFormat <https://www.jetbrains.com/help/clion/clangformat-as-alternative-formatter.html#clion-support>`__
(Pull requests welcome to extend this list with tested plugins.)
.. _doc_code_style_guidelines_header_includes:
Header includes
~~~~~~~~~~~~~~~
@@ -186,7 +195,7 @@ Example:
#include "core/hash_map.h"
#include "core/list.h"
#include "scene/gui/control.h
#include "scene/gui/control.h"
#include <png.h>
@@ -229,7 +238,7 @@ Example:
#include "my_new_file.h"
#include "core/math/math_funcs.h"
#include "scene/gui/line_edit.h
#include "scene/gui/line_edit.h"
#include <zlib.h>
#include <zstd.h>
@@ -254,7 +263,7 @@ Blacken your Python changes using `Black <https://pypi.org/project/black/>`__.
Using black locally
~~~~~~~~~~~~~~~~~~~
First of all, you will need to install black. Black requires Python 3.6.0+
First of all, you will need to install black. Black requires Python 3.6.0+
to run.
Installation

View File

@@ -0,0 +1,97 @@
.. _doc_content_guidelines:
Content guidelines
==================
This document is here to help us assess what we should include in the official
documentation. Below, you will find a couple of principles and recommendations
to write accessible content.
We want to achieve two goals:
1. **Empathize with our users.** We should write in a way that makes it easy for
them to learn from the docs.
2. **Write a complete reference manual**. Our goal here is not to teach
programming foundations. Instead, we should provide a reference for how
Godot's features work.
Guidelines and principles
-------------------------
Below are the guidelines we should strive to follow. They are not hard rules,
though: exceptionally, a topic will require breaking one or more of these.
Still, we should strive to achieve the two goals listed above.
Writing complete and accessible documentation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**A feature doesn't exist unless it is documented**. If a user can't find
information about a feature and how it works, it doesn't exist to them. We
should ensure that we cover everything Godot does.
.. note::
When adding or updating an engine feature, the documentation team needs to
know about it. Contributors should open an issue on the `godot-docs` repository
when their work gets merged and requires documentation.
Do your best to keep documents **under 1000 words in length**. If a page goes
past that threshold, consider splitting it into two parts if possible. Limiting
page size forces us to write concisely and to break large documents so they each
focus on a particular problem.
Make it clear what **problem** each page or section of a page tackles and what
the user will learn from it. Users need to know if they're reading the correct
guide to solving problems they encounter. For example, instead of writing the
heading "Signals", consider writing "Reacting to changes with signals". The
second title makes it clear what the purpose of signals is.
.. note::
Long section titles lead to long entries in the side menu, which can make
navigation cumbersome. Try to keep headings five words long or less.
If the page assumes specific knowledge of other Godot features, mention it and
link it to the corresponding documentation. For instance, a page about physics
may use signals, in which case we could note that the page that introduces
signals is a pre-requisite.
Limiting cognitive load
~~~~~~~~~~~~~~~~~~~~~~~
Limit the cognitive load required to read the documentation. The simpler and
more explicit language we use, the more efficient it becomes for people to
learn. You can do so by:
1. Introducing only one new concept at a time whenever possible.
2. Using simple English, as we recommend in our writing guidelines.
3. Including one or more **concrete usage examples**. Prefer a real-world example
to abstract code like ``foobar``.
While many people may understand more complex language and abstract examples,
you will lose others. Also, understandable writing and practical examples
benefit everyone.
Always make an effort to **put yourself in the user's shoes**. When we
understand something thoroughly, it becomes evident to us. We may fail to think
about details relevant to a newcomer, but **good documentation meets users where
they are**. We should strive to explain each feature's capabilities or intended
uses with the most straightforward language possible.
Try to remember what you first needed to know when learning about the feature or
concept. What new terms did you need to learn? What confused you? What was the
hardest to grasp? You will want users to review your work, and we recommend you
practice explaining the feature before writing about it.
.. note::
Having programming foundations is a pre-requisite to use a complex engine
like Godot. Talking about variables, functions, or classes is acceptable.
But we should favor plain language over specific terminology like
"metaprogramming". If you need to use precise terms, be sure to define them.
When a page assumes knowledge of another engine feature, declare it at the
beginning and link to resources that cover what users need. You may also link to
other websites for pre-requisites beyond the documentation's scope. For example,
you could link to an introduction to programming in the getting started guide, or a
website that teaches math theory in the math section.

View File

@@ -0,0 +1,188 @@
.. _doc_contributing_to_the_documentation:
Contributing to the documentation
=================================
This guide explains how to contribute to Godot's documentation, be it by
writing or reviewing pages.
.. seealso::
If you want to translate pages or the class reference from English to other
languages, read :ref:`doc_editor_and_docs_localization`.
Getting started
---------------
To modify or create pages in the reference manual, you need to edit ``.rst``
files in the `godot-docs GitHub repository
<https://github.com/godotengine/godot-docs>`_. Modifying those pages in a pull
request triggers a rebuild of the online documentation upon merging.
.. seealso:: For details on Git usage and the pull request workflow, please
refer to the :ref:`doc_pr_workflow` page. Most of what it describes
regarding the main godotengine/godot repository is also valid for
the docs repository.
.. warning:: The class reference's source files are in the `Godot engine
repository <https://github.com/godotengine/godot>`_. We generate
the :ref:`Godot API <toc-class-ref>` section of this documentation
from them. If you want to update the description of a class, its
methods, or properties, read
:ref:`doc_updating_the_class_reference`.
What is the Godot documentation
-------------------------------
The Godot documentation is intended as a comprehensive reference manual for the
Godot game engine. It is not meant to contain step-by-step tutorials, except for
two game creation tutorials in the Getting Started section.
We strive to write factual content in an accessible and well-written language. To
contribute, you should also read:
1. The :ref:`doc_docs_writing_guidelines`. There, you will find rules and
recommendations to write in a way that everyone understands.
2. The content guidelines. They explain the principles we follow to write the
documentation and the kind of content we accept.
Contributing changes
--------------------
**Pull Requests should use the** ``master`` **branch by default.** Only make Pull
Requests against other branches (e.g. ``2.1`` or ``3.0``) if your changes only
apply to that specific version of Godot.
Though less convenient to edit than a wiki, this Git repository is where we
write the documentation. Having direct access to the source files in a revision
control system is a plus to ensure our documentation quality.
Editing existing pages
~~~~~~~~~~~~~~~~~~~~~~
To edit an existing page, locate its ``.rst`` source file and open it in your
favorite text editor. You can then commit the changes, push them to your fork,
and make a pull request. **Note that the pages in** ``classes/`` **should not be
edited here.** They are automatically generated from Godots `XML class
reference <https://github.com/godotengine/godot/tree/master/doc/classes>`__.
See :ref:`doc_updating_the_class_reference` for details.
.. seealso:: To build the manual and test changes on your computer, see
:ref:`doc_building_the_manual`.
Editing pages online
--------------------
You can edit the documentation online by clicking the **Edit on GitHub** link in
the top-right of every page.
Doing so takes you to the GitHub text editor. You need to have a GitHub account
and to log in to use it. Once logged in, you can propose change like so:
1. Click the **Edit on GitHub** button.
2. On the GitHub page you're taken to, click the pencil icon in the top-right
corner near the **Raw**, **Blame**, and **Delete** buttons. It has the
tooltip "Fork this project and edit the file".
3. Edit the text in the text editor.
4. At the bottom of the web page, summarize the changes you made and click the
button **Propose file change**. Make sure to replace the placeholder "Update file.rst"
by a short but clear one-line description, as this is the commit title.
5. On the following screens, click the **Create pull request** button until you
see a message like *Username wants to merge 1 commit into godotengine:master
from Username:patch-1*.
Another contributor will review your changes and merge them into the docs if
they're good. They may also make changes or ask you to do so before merging.
Adding new pages
----------------
Before adding a new page, please ensure that it fits in the documentation:
1. Look for `existing issues
<https://github.com/godotengine/godot-docs/issues>`_ or open a new one to see
if the page is necessary.
2. Ensure there isn't a page that already covers the topic.
3. Read our :ref:`doc_content_guidelines`.
To add a new page, create a ``.rst`` file with a meaningful name in the section you
want to add a file to, e.g. ``tutorials/3d/light_baking.rst``.
You should then add your page to the relevant "toctree" (table of contents,
e.g. ``tutorials/3d/index.rst``). Add your new filename to the list on a new
line, using a relative path and no extension, e.g. here ``light_baking``.
Titles
~~~~~~
Always begin pages with their title and a Sphinx reference name:
::
.. _doc_insert_your_title_here:
Insert your title here
======================
The reference ``_doc_insert_your_title_here`` and the title should match.
The reference allows linking to this page using the ``:ref:`` format, e.g.
``:ref:`doc_insert_your_title_here``` would link to the above example page (note
the lack of leading underscore in the reference).
Write your titles like plain sentences, without capitalizing each word:
- **Good:** Understanding signals in Godot
- **Bad:** Understanding Signals In Godot
Only propers nouns, projects, people, and node class names should have their
first letter capitalized.
Sphinx and reStructuredText syntax
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Check Sphinxs `reST Primer <https://www.sphinx-doc.org/en/stable/rest.html>`__
and the `official reference <http://docutils.sourceforge.net/rst.html>`__ for
details on the syntax.
Sphinx uses specific reST comments to do specific operations, like defining the
table of contents (``.. toctree::``) or cross-referencing pages. Check the
`official Sphinx documentation
<https://www.sphinx-doc.org/en/stable/index.html>`__ for more details. To learn
how to use Sphinx directives like ``.. note::`` or ``.. seealso::``, check out
the `Sphinx directives documentation
<https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html>`__.
Adding images and attachments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To add images, please put them in an ``img/`` folder next to the ``.rst`` file with
a meaningful name and include them in your page with:
.. code:: rst
.. image:: img/image_name.png
Similarly, you can include attachments, like assets as support material for a
tutorial, by placing them into a ``files/`` folder next to the ``.rst`` file, and
using this inline markup:
.. code:: rst
:download:`myfilename.zip <files/myfilename.zip>`
License
-------
This documentation and every page it contains is published under the terms of
the `Creative Commons Attribution 3.0 license (CC-BY-3.0)
<https://tldrlegal.com/license/creative-commons-attribution-(cc)>`_, with
attribution to "Juan Linietsky, Ariel Manzur and the Godot community".
By contributing to the documentation on the GitHub repository, you agree that
your changes are distributed under this license.

View File

@@ -0,0 +1,100 @@
.. _doc_cpp_usage_guidelines:
C++ usage guidelines
====================
Rationale
---------
Since Godot 4.0, the C++ standard used throughout the codebase is a subset of
**C++17**. While modern C++ brings a lot of opportunities to write faster, more
readable code, we chose to restrict our usage of C++ to a subset for a few
reasons:
- It makes it easier to review code in online editors. This is because engine
contributors don't always have access to a full-featured IDE while reviewing
code.
- It makes the code easier to grasp for beginner contributors (who may not be
professional C++ programmers). Godot's codebase is known to be easy to learn
from, and we'd like to keep it that way.
To get your pull request merged, it needs to follow the C++ usage guidelines
outlined here. Of course, you can use features not allowed here in your own C++
modules or GDNative scripts.
.. note::
Prior to Godot 4.0, the C++ standard used throughout the codebase was C++03,
with a handful of C++14 extensions. If you are contributing a pull request
to the `3.x` branch rather than `master`, your code can't use C++17 features.
Instead, your code must be able to be built with a C++14 compiler.
The guidelines below don't apply to third-party dependencies, although we
generally favor small libraries instead of larger solutions. See also
:ref:`doc_best_practices_for_engine_contributors`.
.. seealso::
See :ref:`doc_code_style_guidelines` for formatting guidelines.
Disallowed features
-------------------
**Any feature not listed below is allowed.** Using features like ``constexpr``
variables and ``nullptr`` is encouraged when possible. Still, try to keep your
use of modern C++ features conservative. Their use needs to serve a real
purpose, such as improving code readability or performance.
Standard Template Library
^^^^^^^^^^^^^^^^^^^^^^^^^
We don't allow using the `STL <https://en.wikipedia.org/wiki/Standard_Template_Library>`__
as Godot provides its own data types (among other things).
See :ref:`doc_faq_why_not_stl` for more information.
This means that pull requests should **not** use ``std::string``,
``std::vector`` and the like. Instead, use Godot's datatypes as described below:
- Use ``String`` instead of ``std::string``.
- Use ``Vector`` instead of ``std::vector``. In some cases, ``List`` or
``LocalVector`` can be used as an alternative (ask core developers first).
- Use ``Array`` instead of ``std::array``.
``auto`` keyword
^^^^^^^^^^^^^^^^
Please don't use the ``auto`` keyword for type inference. While it can avoid
repetition, it can also lead to confusing code:
.. code-block:: cpp
// Not so confusing...
auto button = memnew(Button);
// ...but what about this?
auto result = EditorNode::get_singleton()->get_complex_result();
Keep in mind hover documentation often isn't readily available for pull request
reviewers. Most of the time, reviewers will use GitHub's online viewer to review
pull requests.
We chose to forbid ``auto`` instead of allowing it on a case-by-case basis to
avoid having to decide on difficult edge cases. Thank you for your understanding.
Lambdas
^^^^^^^
Lambdas should be used conservatively when they make code effectively faster or
simpler, and do not impede readability. Please ask before using lambdas in a
pull request.
``#pragma once`` directive
^^^^^^^^^^^^^^^^^^^^^^^^^^
To follow the existing style, please use standard ``#ifdef``-based include
guards instead of ``#pragma once`` in new files.
.. seealso::
See :ref:`doc_code_style_guidelines_header_includes` for guidelines on sorting
includes in C++ and Objective-C files.

View File

@@ -32,6 +32,11 @@ There are 3 rules to describe classes:
the smallest and clearest sentences possible. These guidelines will help
you work towards that goal.
.. seealso::
See the :ref:`content guidelines <doc_content_guidelines>` for information
on the types of documentation you can write in the official documentation.
7 rules for clear English
-------------------------
@@ -105,7 +110,7 @@ The progressive forms describe continuous actions. E.g. "is calling",
Vector2 move ( Vector2 rel_vec )
Move the body in the given direction, **stopping** if there is an obstacle. [...]
**Do** use simple present, preterit or future.
**Do** use simple present, past, or future.
::
@@ -295,7 +300,7 @@ The exception is topics that explain static typing concepts to users.
const MainAttack := preload("res://fire_attack.gd")
var hit_points := 5
var name: String = "Bob"
var body_sprite := $Sprite as Sprite
var body_sprite := $Sprite2D as Sprite2D
**Do** write constants and variables with dynamic typing:
@@ -305,14 +310,14 @@ The exception is topics that explain static typing concepts to users.
const MainAttack = preload("res://fire_attack.gd")
var hit_points = 5
var name = "Bob"
var body_sprite = $Sprite
var body_sprite = $Sprite2D
**Don't** write functions with inferred arguments or return types:
::
func choose(arguments: PoolStringArray) -> String:
func choose(arguments: PackedStringArray) -> String:
# Chooses one of the arguments from array with equal chances
randomize()
var size := arguments.size()

View File

@@ -25,9 +25,11 @@ documentation.
describes regarding the main godotengine/godot repository is
also valid for the docs repository.
The README.md file contains all the information you need to get you started,
please read it. In particular, it contains some tips and tricks and links to
reference documentation about the reStructuredText markup language.
.. warning:: The class reference's source files are in the `Godot engine repository
<https://github.com/godotengine/godot>`_. We generate the :ref:`Godot API
<toc-class-ref>` section of this documentation from them. If you want to update the
description of a class, its methods, or properties, read
:ref:`doc_updating_the_class_reference`.
.. warning:: If you want to edit the **API reference**, please note that it
should *not* be done in the godot-docs repository. Instead, you

View File

@@ -112,7 +112,7 @@ translation interface where all the work happens:
On that page, you have:
- A toolbar which lets you cycle through strings of the current list, change
to another pre-defined list or do a custom search, etc. There is also a "Zen"
to another predefined list or do a custom search, etc. There is also a "Zen"
editing mode with a simplified interface.
- The actual string you are working on in the "Translation" panel. By default,
there should be the English source string and an edit box for your language.
@@ -171,8 +171,8 @@ translating.
a page that you want to translate, and then translate all the strings with the
same source string location while comparing with the online version of that
page in English. An example of source string location could be
``getting_started/step_by_step/scenes_and_nodes.rst`` for the
page :ref:`doc_scenes_and_nodes`.
``getting_started/step_by_step/nodes_and_scenes.rst`` for the
page :ref:`doc_nodes_and_scenes`.
- The class reference's translation template is generated from the source XML
files in **alphabetical order**, which is also the same as the order of the
table of contents for the online version. You can therefore locate the source
@@ -184,7 +184,7 @@ translating.
A handy tool to locate specific pages/classes is to use Weblate's advanced
search feature, and especially the "Location strings" query (which can also be
used with the ``location:`` token, e.g. ``location:scenes_and_nodes.rst``):
used with the ``location:`` token, e.g. ``location:nodes_and_scenes.rst``):
.. image:: img/l10n_05_search_location.png
@@ -194,9 +194,9 @@ used with the ``location:`` token, e.g. ``location:scenes_and_nodes.rst``):
When a given source string is used in multiple source locations, they will
all be concatenated into one. For example, the above
``location:scenes_and_nodes.rst`` query would land first on the
``location:nodes_and_scenes.rst`` query would land first on the
"Introduction" source string which is used in dozens of pages, including
some that come before ``scenes_and_nodes.rst`` in the template. Clicking the
some that come before ``nodes_and_scenes.rst`` in the template. Clicking the
"Next" button then brings us to the "Scene and nodes" title string displayed
above.
So it may happen that a given paragraph or section title is not at the
@@ -243,6 +243,10 @@ The editor translations originate from C++ strings, and may use:
Scene '%s' is currently being edited.↵
Changes will only take effect when reloaded.
.. note::
Only logical order of the characters matters, in the right-to-left text, format
specifiers may be displayed as ``s%``.
Online documentation (RST)
^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -324,7 +328,7 @@ breaks if they are not part of the original translation.
.. seealso::
See our documentation for class reference writers for the :ref:`list of
BBCode-like tags <doc_updating_the_class_reference_bbcode>` which are used
BBCode-like tags <doc_class_reference_writing_guidelines_bbcode>` which are used
throughout the class reference.
Offline translation and testing

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Some files were not shown because too many files have changed in this diff Show More